2013-07-01 7 views
1

오늘 게임에서 키보드 입력을 항상 0보다 높게 설정했습니다. 그러나 어떤 이유로 키보드를 클릭하고 다시 클릭 할 때마다 키가 다시 입력됩니다. 입력이 작동을 멈 춥니 다. 여기에 내 keyPressedkeyReleased 방법에있는 것입니다 :윈도우가 초점이 맞춰지면 Java 입력이 작동을 멈 춥니 다.

public void keyPressed(KeyEvent e) { 

    int code = e.getKeyCode(); 

    switch (code) { 
    case KeyEvent.VK_W: 
     keys[0] = true; 
     break; 
    case KeyEvent.VK_D: 
     keys[1] = true; 
     break; 
    case KeyEvent.VK_S: 
     keys[2] = true; 
     break; 
    case KeyEvent.VK_A: 
     keys[3] = true; 
     break; 
    } 
} 

public void keyReleased(KeyEvent e) { 

    int code = e.getKeyCode(); 

    switch (code) { 
    case KeyEvent.VK_W: 
     keys[0] = false; 
     break; 
    case KeyEvent.VK_D: 
     keys[1] = false; 
     break; 
    case KeyEvent.VK_S: 
     keys[2] = false; 
     break; 
    case KeyEvent.VK_A: 
     keys[3] = false; 
     break; 
    } 
} 
+0

그다지 진행되지 않습니다. 이 방법들에 중단 점을 설정 했습니까? 이것을 디버깅하기 위해 지금까지 무엇을 했습니까? –

+0

창 포커스 이벤트에 대한 응답으로 처리를 수행합니까? (좀 더 구체적으로, 초점이 맞지 않는 이벤트에 대한 응답으로) –

+0

@ 짐 가르온 (JimGarrison) 나는 이것을 행운으로 몇 시간 동안 연구했다. 이것은 전에 결코 일어나지 않았다. –

답변

3

KeyListener이 초점 문제가 악명이 높다. KeyListener에서 이벤트를 발생 시키려면 등록 된 구성 요소에 포커스가 있어야 할뿐만 아니라 포커스가 있어야합니다.

대신에, 당신은 당신이 다른 (몇) 문제가 AWT 구성 요소를 사용하는 경우이 짧은 오심

개정

를 극복하기위한 메커니즘을 가지고 Key Bindings를 사용한다. 기본적으로 통화를 클릭 할 때 구성 요소를 포커스로 만들 필요가 있습니다. requestFocusInWindow

+0

샌드위치는 영양가가 높지만 'KeyListener'가 어떻게 될 수 있는지 알지 못합니다. 아마도 "악명 높은"것을 의미할까요? (가장 가능성이 높은 문제를 지적하기 위해 +1, btw) –

+1

@TedHopp 나는 "**에 완전한 고통을 말하려는 생각을했지만 그 이상은 정상으로 진행된다고 생각했다.) – MadProgrammer

+0

나는 그 링크에서 무엇을 보았다. 하지만 awt 캔버스 또는 Jframe에 대한 키 바인딩을 추가하려면 어떻게해야합니까? –

1

키보드를 사용하여 구성 요소의 애니메이션을 만드는 것처럼 보입니다. a KeyListener 사용에 관한 몇 가지 문제점을 설명하고 Key Binding을 사용하는 방법을 보여주는 Motion With the Keyboard을 참조하십시오.

관련 문제