3

だから、ここに私の問題があります。ユーザーがAndroidフォンとやり取りする方法に基づいて、キーストロークメッセージをゲーム(Unityで構築)に送信するJavaプログラムがあります。(私の Java プログラムは、wi-fi を介した Android インタラクションのリスナーです) これを行うために、java.awt.RobotkeyPresses をゲーム ウィンドウに送信するために使用しています。リスナー プログラムに次のコード ブロックを記述しました。

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

interactingこれで、ユーザーが電話のタッチ スクリーンを押している限り、変数は true になり、達成しようとしているのは、(リスナーを通じて) ゲームに配信されるキーストローク メッセージの連続チェーンです。ただし、これは何らかの理由でパフォーマンスに深刻な影響を与えています。一般的に、ゲームが遅くなり (フレーム レートが急速に低下する)、コンピューターでさえ遅くなることに気付きました。何がうまくいかないのですか?robot.keyRelease(VK_A)after eachを使用する必要がありkeyPressますか? しかし、私のゲームには別のアクションがキーのリリースにマップされており、キーをすばやく押したり離したりしたくありません。私が本当に望んでいるのは、ユーザーがキーボードのキーを手動で押した場合とまったく同じように、連続したキーストロークをシミュレートすることです。A助けてください。

4

2 に答える 2

2

ロボット オブジェクトは、通常のユーザーと同じキーボードとマウスの制御パターンを実際にシミュレートします。したがって、キーが押された場合はいつでも離す必要があります。

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);

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

于 2012-12-20T07:08:17.283 に答える
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
}
于 2012-04-09T05:25:05.770 に答える