2012-04-09 2 views
2

그래서, 여기 내 문제가있다. 나는 사용자가 안드로이드 폰과 어떻게 상호 작용하는지에 기반하여 게임에 키 스트로크 메시지를 보내는 자바 프로그램을 가지고있다. (내 Java 프로그램은 wifi를 통한 안드로이드 상호 작용을위한 청취자입니다.) 이제이 작업을 수행하기 위해 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

어? 안드로이드는 AWT 로봇을 제공하지 않습니다. –

답변

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

이 예에서는 메모장 창이 열립니다.

관련 문제