2013-04-17 5 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(); 
     } 
    } 

Im все еще та же проблема с кодом, Im начинают думать, что они его Keyboard.next(), что мешает мне удерживать кнопку, и игрок все еще движется.

+0

Вы попробовали Keyboard.isKeyDown (int key)? – Orion

+0

@Orion Да, я попробовал это. – 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

Спасибо за этот ответ, я собираюсь проверить его, и если он сработает, я соглашусь с ответом. Я вернусь завтра с моими выступлениями. – Rakso

+0

Это не позволяет игроку перемещаться, удерживая кнопку. Он перемещается только на нажатие клавиши. – Rakso

1

Хотя вышеприведенный ответ будет работать, LWJGL может обнаруживать, удерживается ли ключ нажатой. Однако он не включен по умолчанию, поэтому вам нужно включить его. Для этого просто установите этот флаг как true в инициализации ввода.

Keyboard.enableRepeatEvents(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.

Смежные вопросы