2012-04-09 78 views
2

所以,这是我的问题。我有一个Java程序,它会根据用户如何与Android手机进行交互,将按键消息发送到Unity(内置)游戏。 (我的java程序是通过Wi-Fi进行android交互的一个监听器)现在,为了做到这一点,我使用java.awt.Robot将keyPresses发送到游戏窗口。我有以下的代码块在我的听众编写的程序: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

咦? Android不提供AWT机器人。 – 2012-04-09 08:54:46

回答

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

这个例子会打开一个记事本窗口。