3

所以,这是我的问题。我有一个 java 程序,它将根据用户与 android 手机的交互方式将击键消息发送到游戏(内置于 Unity)。(我的 java 程序是通过 wi-fi 进行 android 交互的监听器) 现在,为了做到这一点,我正在使用java.awt.Robot将 keyPresses 发送到游戏窗口。我在侦听器程序中编写了以下代码块:

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

interacting现在,只要用户按下手机的触摸屏,该变量就会为真,而我打算实现的是将连续的击键消息链传递给游戏(通过侦听器)。但是,出于某种原因,这会严重影响性能。我注意到游戏变得很慢(帧速率迅速下降),甚至计算机也变得很慢,一般来说。怎么了?我应该robot.keyRelease(VK_A)在每个之后使用一个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 回答