2012-04-09 64 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); 

這個例子會打開一個記事本窗口。