2016-10-14 2 views
1

문제가 있습니다. 화살표를 누를 때 호출되는 몇 가지 간단한 함수를 구현했습니다.두 개의 화살표가 감지되지 않음 - 자바 스윙

public void keyPressed(KeyEvent e) 
    { 
     int key = e.getKeyCode(); 
     if(key == KeyEvent.VK_LEFT) 
     { 

      double t = p.getAngle(); 
      if(p.getIsTurning()) 
       t+=3; 
      else 
       t+=6; 
      p.setAngle(t); 
      p.setIsTurinig(true); 

     } 
     else if(key == KeyEvent.VK_UP) 
     { 
      p.setVelX(p.getVelX()+p.getAcceleration()); 
      p.setIsAccelerating(true); 
     }  
} 

위쪽 화살표를 누른 다음 왼쪽을 누르면 모든 것이 잘 작동합니다. 그러나 왼쪽 화살표를 누른 다음 위쪽 화살표를 누르면 위쪽 화살표 기능 만 감지됩니다.

무엇이 문제를 일으킬 수 있습니까?

+0

물론 첫 번째 else if이어야합니다. – chodi

+2

그런 다음 코드를 편집하여이를 나타내야합니다. – DevilsHnd

+1

KeyListener를 사용하지 마십시오. 특정 이벤트를 처리하려면'Key Bindings '를 사용해야합니다. 동시에 여러 키를 눌러 작동하는 자세한 정보 및 작동 예제는 [키보드를 사용한 동작]()을 참조하십시오. – camickr

답변

1

아니요 의 경우 왼쪽 및 위쪽 화살표 키가 동시에 눌린 것을 감지합니다. 이 이벤트는 마지막 키만 누를 것입니다. 위쪽 화살표를 누른 다음 왼쪽 화살표 키를 눌러도 실제로 감지하는 것은 모두 왼쪽 화살표 키입니다. DOWN 및 LEFT 화살표 키를 아주 잘 누르면 IF 조건이 실행됩니다. 여러 개의 키를 동시에 누르면 여부를 감지하는

한 가지 방법은 키를 누르면 원하는 및 아닌 나타내는 부울 플래그를 만드는 것입니다하지만 당신은 또한 필요한 위조하도록 이벤트의 keyReleased 활용해야합니다 특정 키가 해제 될 때 플래그를 지정합니다. 부울 플래그는 예를 들어, 키보드 이벤트에 글로벌 있어야한다 :

그 효과에 적어도 뭔가
boolean keyOne = false; // flag for LEFT Arrow key 
boolean keyTwo = false; // flag for UP Arrow key 

public void keyPressed(KeyEvent e) { 
    int key = e.getKeyCode(); 
    if(key == KeyEvent.VK_LEFT) { keyOne = true; } 
    else if(key == KeyEvent.VK_UP) { keyTwo = true; } 

    if (keyOne && !keyTwo) { 
     System.out.println("Only the LEFT Arrow key is pressed!"); 
    } 
    else if (!keyOne && keyTwo) { 
     System.out.println("Only the UP Arrow key is pressed!"); 
    } 
    else if (keyOne && keyTwo) { 
     System.out.println("Both LEFT Arrow and UP Arrow keys are pressed!); 
    } 
} 

public void keyReleaseded(KeyEvent e) { 
    int key = e.getKeyCode(); 
    if(key == KeyEvent.VK_LEFT) { keyOne = false; } 
    else if(key == KeyEvent.VK_UP) { keyTwo = false; } 
} 

...

놓습니다 (keyOne & & keyTwo) 조건의 경우에 원하는 코드 .

관련 문제