2014-07-14 4 views
1

한 번에 여러 키 누르기를 확인할 수있는 간단한 방법이 있습니까? 나는 다음과 같이 사용한다 :Java 여러 키 누르기

this.addKeyListener(new KeyAdapter() 
    { 
     public void keyPressed(KeyEvent arg0) 
     { 
      if(arg0.getKeyCode()==KeyEvent.VK_LEFT) 
      { 
       if (checkMovement(-1, user.getFalling())) 
       { 
        user.move("left"); 
       } 
      } 
     } 
    }); 

그리고 움직이는 동안 'sprint'버튼을 누르고 싶다. 다른 키를 확인하고 다른 메서드를 사용하여 "user.sprint()"메서드를 사용했지만 다른 키 수신기를 한 번에 인식하지 못했습니다.

키가 눌러져 있는지 쉽게 확인할 수있는 방법이 있습니까? 스레드가 실행될 때 눌려 졌는지 확인하기 위해 스레드에 if-statement를 넣을 수 있습니까?

감사합니다.

답변

0

move 키의 경우 수행중인 작업이 정상입니다.

스프린트 버튼의 경우 키를 눌렀을 때를 기록하려면 KeyAdapter#keyPressed을, 키를 놓은 시점을 기록하려면 KeyAdapter#keyReleased을 사용하십시오 (예 : boolean에 저장).

그런 다음 이동 이벤트가 발생하면 부울을 확인하여 걷거나 달리기를 확인하십시오. 예를 들어, 현재 어떤 키가 눌려져 있는지 기록하는 키 어댑터가 있습니다.

Set<Integer> pressed = new HashSet<>(); 
this.addKeyListener(new KeyAdapter() { 
     public void keyPressed(KeyEvent arg0) { 
      pressed.add(arg0.getKeyCode()); 
     } 

     public void keyReleased(KeyEvent arg0) { 
      pressed.remove(arg0.getKeyCode()); 
     } 
    }); 
// if pressed.contains(keyCode), that key is currently being held 
+0

나는 그것을 시도했지만 잘못하지 않았다면 두 번째 버튼을 누를 때마다 누르고있는 버튼 이동 버튼을 취소하므로 화살표 키를 다시 눌러야합니다. 이 문제를 해결할 방법이 있습니까? 내가 잘못 했니? – user3838829

+0

@ user3838829 당신은 아마도 그 코드를 게시하지 않았기 때문에 당신이 잘못했을 것입니다. 나는 더 이상의 코멘트를 할 수 없습니다. 보유하지 않은 버튼을 탐지하기 위해'keyTyped' 이벤트를 사용해야합니다. – Aurand

+0

내 시도는 [link] (http://prntscr.com/42re1f)입니다. 그 사람은 계속해서 먼저 스프린트를하기 위해 Enter 키를 누른 다음 화살표 키로 이동해야합니다. 그러나 화살표 키를 누른 다음 입력하면 플레이어가 계속 실행되지 않습니다. – user3838829

0

나는 아주 좋아하는 해결책을 발견했다. 넣다 다른 사람이 나는 기본적으로, 키 입력은 플레이어의 이동 방향을 설정 :)

this.addKeyListener(new KeyAdapter() 
    { 
     public void keyPressed(KeyEvent arg0) 
     { 
      if(arg0.getKeyCode()==KeyEvent.VK_LEFT) 
      { 
       if (!world.user.moving()) if (world.checkMovement(-1)) world.user.move("left"); 
      } 
      if(arg0.getKeyCode()==KeyEvent.VK_RIGHT) 
      { 
       if (!world.user.moving()) if (world.checkMovement(1)) world.user.move("right"); 
      }     
      if (arg0.getKeyCode()==KeyEvent.VK_UP) 
      { 
       world.user.jump(); 
      } 
     } 

     public void keyReleased(KeyEvent arg0) 
     { 
      if(arg0.getKeyCode()==KeyEvent.VK_LEFT) 
      { 
       world.user.move("left","stop"); 
      }         
      if (arg0.getKeyCode()==KeyEvent.VK_RIGHT) 
      { 
       world.user.move("right","stop"); 
      } 
     } 
    }); 

아래 코드를 게시 할 예정입니다, 내가 그것을 어떻게보고 싶어. 플레이어를 중지시키기 위해 이동 방향으로 키를 놓았는지 확인합니다.