2012-04-09 11 views
2

Also, hier ist mein Problem. Ich habe ein Java-Programm, das Keystroke-Nachrichten an ein Spiel (in Unity) sendet, basierend darauf, wie der Benutzer mit einem Android-Handy interagiert. (Mein Java-Programm ist ein Listener für die Android-Interaktion über Wi-Fi) Jetzt, um dies zu tun, verwende ich java.awt.Robot, um keyPressen an das Spielfenster zu senden. Ich habe den folgenden Code-Block in meinem Zuhörer Programm geschrieben:java.awt.Robot.keyPress für kontinuierliche Tastenanschläge

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

Nun ist die Variable interacting so lange wahr sein wird, wenn der Benutzer auf dem Touchscreen des Telefons nach unten drückt, und dem, was ich beabsichtige, eine kontinuierliche zu erreichen ist Kette von Tastenanschlägen, die dem Spiel (durch den Zuhörer) zugeführt werden. Dies beeinträchtigt jedoch die Leistung aus irgendeinem Grund erheblich. Ich merke, dass das Spiel langsam wird (schnell abfallende Frameraten), und sogar der Computer wird im Allgemeinen langsam. Was läuft falsch? Sollte ich eine robot.keyRelease(VK_A) nach jeder keyPress verwenden? Aber mein Spiel hat eine andere Aktion, die der Freigabe eines Schlüssels zugeordnet ist, und ich möchte keine schnellen Tasten drücken und freigeben; Was ich wirklich will, ist die Simulation von kontinuierlichen Tastenanschlägen, in genau die Art, wie es sich verhalten würde, wenn der Benutzer die A Taste auf ihrer Tastatur manuell herunterdrücken würde. Bitte helfen Sie.

+0

Huh? Android bietet keinen AWT-Roboter. –

Antwort

1

Ja, wenn Sie eine Taste mit der Robot drücken, müssen Sie sie auch freigeben.

Vielleicht etwas in dieser Richtung?

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

Roboterobjekt wird tatsächlich das gleiche Tastatur- und Maussteuerungsmuster simulieren wie jeder normale Benutzer. Daher sollte in jedem Fall, in dem eine Taste gedrückt wird, diese freigegeben werden.

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

Dieses Beispiel öffnet ein Notizblockfenster.

Verwandte Themen