2012-04-09 4 views
2

これは私の問題です。私は、ユーザーがアンドロイド携帯電話とやり取りする方法に基づいて、ゲームにキーストロークメッセージを送信するJavaプログラムを持っています(Unityで構築されています)。 (私のJavaプログラムはwi-fi上のAndroidインタラクションのリスナーです)これを行うために、私はjava.awt.Robotを使用してkeyPressをゲームウィンドウに送ります。私は自分のリスナープログラムで書かれた次のコードブロックを持っている:連続したキーストロークのためのjava.awt.Robot.keyPress

if(interacting) 
{ 
    Robot robot = new Robot(); 
    robot.keyPress(VK_A); 
    robot.delay(20); //to simulate the normal keyboard rate 
} 

今変数interactingは、ユーザーが携帯電話のタッチスクリーンを押し下げる限り真であること、そして私が達成しようとすると、連続しておりますキーストロークメッセージの連鎖が(リスナーを介して)ゲームに配信されます。ただし、これは何らかの理由でパフォーマンスに重大な影響を与えます。私はゲームが遅くなり(フレームレートが急速に低下する)、一般的にコンピュータが遅くなることに気づいています。何がうまくいかないの?それぞれkeyPressの後にrobot.keyRelease(VK_A)を使用する必要がありますか?しかし、私のゲームでは、キーのリリースにマッピングされた別のアクションがあります。私が本当に望むのは、ユーザーがAキーを手動で押した場合の動作と同じように、連続したキーストロークをシミュレートすることです。正確にはです。助けてください。

+0

Huh? AndroidはAWTロボットを提供していません。 –

答えて

1

はい、Robotのキーを押すと、それも解除する必要があります。

おそらく、これらの行に沿った何か?

Robot robot = new Robot(); 

if(interacting) 
{ 
    robot.keyPress(VK_A); 
    robot.delay(20); //to simulate the normal keyboard rate 
    robot.keyRelease(VK_A); 
    robot.delay(20); //to simulate the normal keyboard rate 
} 
1

ロボットオブジェクトは、通常のユーザーと同じキーボードとマウスの制御パターンを実際にシミュレートします。したがって、キーが押されるたびに、それは解放されるべきです。

Robot robot = new Robot(); 
robot.delay(10000); 
robot.keyPress(KeyEvent.VK_WINDOWS); 
robot.keyPress(KeyEvent.VK_R); 
robot.keyRelease(KeyEvent.VK_R); 
robot.keyRelease(KeyEvent.VK_WINDOWS); 
robot.delay(2000); 
robot.keyPress(KeyEvent.VK_N); 
robot.keyRelease(KeyEvent.VK_N); 
robot.keyPress(KeyEvent.VK_O); 
robot.keyRelease(KeyEvent.VK_O); 
robot.keyPress(KeyEvent.VK_T); 
robot.keyRelease(KeyEvent.VK_T); 
robot.keyPress(KeyEvent.VK_E); 
robot.keyRelease(KeyEvent.VK_E); 
robot.keyPress(KeyEvent.VK_P); 
robot.keyRelease(KeyEvent.VK_P); 
robot.keyPress(KeyEvent.VK_A); 
robot.keyRelease(KeyEvent.VK_A); 
robot.keyPress(KeyEvent.VK_D); 
robot.keyRelease(KeyEvent.VK_D); 
robot.keyPress(KeyEvent.VK_ENTER); 
robot.keyRelease(KeyEvent.VK_ENTER); 

この例では、メモ帳ウィンドウが開きます。

関連する問題