2013-04-17 2 views
1

그래서 기본적으로 LWJGL을 사용하여 게임에서 플레이어를 움직이게하려고합니다. 플레이어는 현재 이동하지만 당신은 버튼을 누르고있는 동안 그는 mooving 계속 나던 ..키를 누른 상태에서 LWJGL을 누르십시오.

파라미터 :() { 동안 (Keyboard.next()) {

 if(Keyboard.getEventKey() == Keyboard.KEY_RIGHT) { 
      if(Keyboard.getEventKeyState()){ 
       System.out.println("KEY DOWN!"); 
       player.playerMovingRight(); 
      } 
      else{ 
       System.out.println("KEY RELEASED!"); 
      } 
     } 
    } 

나는 잠시을 사용하여 시도 (Keyboard.getEventKeyState())하지만 그것은 단지 게임 충돌을 만들었고 키를 놓으면 인식하지 못합니다.

그럼 키를 빠르게 움직여야하는 대신 버튼을 길게 누르면 플레이어가 계속 움직일 수 있습니다. 플레이어가 동시에 2 개의 버튼을 누른다면 어떻게 작동합니까?

업데이트 코드 :

임은 여전히, 필자가 생각하기 시작 코드와 같은 문제가
public void update(){ 
    while(Keyboard.next()){ 

     //If key escape is down we shut the application down 
     if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)){ 
      System.exit(0); 
     } 

     //If key up was pressed move up 
     else if(Keyboard.getEventKey() == Keyboard.KEY_UP) { 
      if(Keyboard.getEventKeyState()){ 
       System.out.println("KEY DOWN!"); 
       moveUp = true; 
      } 
      else{ 
       System.out.println("KEY RELEASED!"); 
       moveUp = false; 
      } 
     } 
     //If key down was pressed move down 
     else if(Keyboard.getEventKey() == Keyboard.KEY_DOWN) { 
      if(Keyboard.getEventKeyState()){ 
       System.out.println("KEY DOWN!"); 
       moveDown = true; 
      } 
      else{ 
       System.out.println("KEY RELEASED!"); 
       moveDown = false; 
      } 
     } 

     if(moveUp == true){ 
      player.playerMovingUp(); 
     } 
     if(moveDown == true){ 
      player.playerMovingDown(); 
     } 
    } 

는 그들이 Keyboard.next() 버튼 여전히이 이동하는 플레이어를 들고 나를 방지된다.

+0

Keyboard.isKeyDown (int key)을 시도 했습니까? – Orion

+0

@ 오리온 예. 나는 그것을 시도했습니다. – Rakso

답변

2

필요한 것은 단추를 눌렀을 때 트리거되고 단추를 놓을 때 트리거되지 않는 부울 플래그입니다. 그런 다음 플래그는 이동 코드 앞에 if 문에 추가됩니다. 이렇게 :

if(Keyboard.getEventKey() == Keyboard.KEY_RIGHT) { 
     if(Keyboard.getEventKeyState()){ 
      System.out.println("KEY DOWN!"); 
      flag = true;  
     } 
     else{ 
      System.out.println("KEY RELEASED!"); 
      flag = false; 
     } 
    } 
} 

//player movement code 

if(flag) { 
    player.playerMovingRight(); 
} 

여러 개의 키를 사용하여이를 수행하는 방법은 부울 트리거의 배열을 사용하고 각 키에 대한 검사를 반복하는 것입니다.

+0

이 답장을 보내 주셔서 감사합니다. 나는 그것을 시험해 볼 것이고 작동한다면 나는 답을 받아 들일 것입니다. 나는 내일 내 ressults와 함께 올 것이다. – Rakso

+0

이 사실은 플레이어가 버튼을 누른 상태에서 움직이지 않게합니다. 키를 눌러도 계속 움직입니다. – Rakso

1

위의 대답은 작동하지만 LWJGL은 키가 눌려져 있는지 감지 할 수 있습니다. 기본적으로 활성화되어 있지 않으므로 활성화해야합니다. 이렇게하려면이 플래그를 입력 초기화 어딘가에 true로 설정하십시오.

이제 이벤트 루프에서 반복적인지 확인하기 위해 키를 확인하십시오 (누른 키).

if(Keyboard.isRepeatEvent()) 

다음은 다른 키 상태에 대해 키를 확인하는 방법을 보여주는 작은 샘플입니다.

while(Keyboard.next()) 
    { 
     if(Keyboard.getEventKey() == Keyboard.KEY_A) 
      if(Keyboard.getEventKeyState()) 
      { 
       if(Keyboard.isRepeatEvent()) 
        // Key held down 
       else 
        // Key pressed 
      } 
      else 
       // Key released 
    } 
1

while(Keyboard.next())은 이벤트와 함께 사용되어야합니다.

사건이 발생하면 무언가를하고 싶지 않을 것입니다. 그러나 키를 누르거나 누르지 않더라도 초당 여러 번 결정하려고합니다. 그런 경우 무언가를하고 싶습니다 (예 : 이동).

Keyboard.isKeyDown() 기능을 사용하는 것이 가장 좋은 해결책입니다. 약간의 예 :

if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { 
    System.out.println("pressing KEY_UP"); 
} 
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { 
    System.out.println("pressing KEY_DOWN"); 
} 
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) { 
    System.out.println("pressing KEY_LEFT"); 
} 
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) { 
    System.out.println("pressing KEY_RIGHT"); 
} 

또한 좋은 튜토리얼 here를 찾을 수 있습니다.

관련 문제