2012-04-09 3 views
2

Donc, voici mon problème. J'ai un programme Java qui enverra des messages de frappe à un jeu (construit dans Unity), basé sur la façon dont l'utilisateur interagit avec un téléphone Android. (Mon programme Java est un écouteur pour l'interaction android sur wi-fi) Maintenant, pour ce faire, j'utilise java.awt.Robot pour envoyer keyPresses à la fenêtre de jeu. Je le bloc de code suivant écrit dans mon programme d'écoute:java.awt.Robot.keyPress pour les frappes en continu

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

Maintenant, la interacting variable sera vrai tant que l'utilisateur appuie sur l'écran tactile du téléphone, et ce que je veux réaliser est un processus continu chaîne de messages de frappe étant livrés au jeu (à travers l'auditeur). Cependant, cela affecte gravement les performances, pour une raison quelconque. Je remarque que le jeu devient lent (baisse rapide des fréquences d'images), et même l'ordinateur devient lent, en général. Qu'est-ce qui ne va pas? Dois-je utiliser un robot.keyRelease(VK_A) après chaque keyPress? Mais mon jeu a une action différente mappée à la sortie d'une clé, et je ne veux pas de presses rapides et de sorties; ce que je veux vraiment, c'est de simuler des frappes continues, en exactement la façon dont il se comporterait si l'utilisateur appuyait sur la touche A sur leur clavier manuellement. S'il vous plaît aider.

+0

Hein? Android n'offre pas de robot AWT. –

Répondre

1

Oui, si vous appuyez sur une touche avec le code Robot, vous devez également le relâcher.

Peut-être quelque chose dans ce sens?

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

L'objet robot simulera en fait le même schéma de contrôle du clavier et de la souris que n'importe quel utilisateur normal. par conséquent, dans tous les cas où une touche est enfoncée, elle doit être libérée.

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

cet exemple ouvrira une fenêtre Bloc-notes.

Questions connexes