2014-01-25 4 views
2

라인을 작성하는 방법이 있나요자바 로봇 클래스의 KeyEvent

r.keyPress(KeyEvent.VK_SPACE); 
사파리에서 실행되는 HTML 5 게임은 게임 내에서 발생 한 같은 스페이스 바를 눌러 등록 할 수

? (게임 내부에서 "공간"이 물리적으로 눌려진 것처럼 게임이 반응하게됩니다.)

예를 들어, 일부 KeyEvents는 특정 요소의 맨 위에있을 때만 등록되는 것으로 인식합니다. 동일한 코드가 솟다 브라우저에서 실행되는 HTML 5 게임을 실행할 때

import java.awt.Robot; 
import java.awt.AWTException; 
import java.awt.event.KeyEvent; 

public class SpaceBarPress { 

    SpaceBarPress(){ 
    } 

    public static void main (String[] args) { 
     try{ 
      Robot r = new Robot(); //create instance of robot class 
      r.mouseMove(600,323); //move cursor over top URL bar 

      r.mousePress(InputEvent.BUTTON1_MASK); //bring URL bar into focus 
      r.mouseRelease(InputEvent.BUTTON1_MASK); 

      r.keyPress(KeyEvent.VK_SPACE); //fire spacebar event 
      r.keyRelease(KeyEvent.VK_SPACE); 

      } 
      catch(AWTException e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

그러나,하는 스페이스 바를 이벤트가 내부 등록되지 않습니다 : 아래의 코드는 성공적으로 사파리의 URL 표시 줄에 스페이스 바를 프레스 이벤트를 등록합니다 게임. 반면에 실제 스페이스 바를 누르면 게임에 영향을 미칩니다.

+0

브라우저 창을 클릭하는 데 왜 URL 막대를 클릭해야합니까? 실제 브라우저의 캔버스를 클릭하지 않는 이유는 무엇입니까? – Skyler

+0

@Skyler 브라우저에 초점을 맞추는 데 어떤 문제도 없습니다. 문제는 스페이스 바 이벤트를 시작하려고 할 때 발생합니다. 스페이스 바 이벤트는 URL 표시 줄에 포커스가있을 때 작동하지만 브라우저에서 실행중인 html 5 게임 창에 집중할 때 작동하지 않습니다. –

답변

0

로봇 키 이벤트는 응용 프로그램에서 처리하는 방법보다 빠르게 실행됩니다. 대신 언론과 보도 자료 사이에 40 분의 1 초의 지연을 사용하십시오.

r.keyPress(KeyEvent.VK_SPACE); //fire spacebar event 
r.delay(40); 
r.keyRelease(KeyEvent.VK_SPACE);