J2ME управляет ВЛЕВО и ВВЕРХ

#java #java-me #midlet

#java #java-me #мидлет

Вопрос:

Я пытаюсь создать 2d-игру, используя java microedition, и я просто хочу сделать свой контроль более плавным, но проблема в том, что когда я нажимаю левую клавишу при нажатии клавиши UP, условие не работает, я не знаю почему

 public void moveJet2() throws IOException{
     int gameAction = getKeyStates();

     if(gameAction==LEFT_PRESSED amp;amp; gameAction==UP_PRESSED){
         padX-=padXVel;
         padY-=padYVel;
     }
     else if(gameAction==RIGHT_PRESSED){
         padX  = padXVel;
     }
     else if(gameAction==UP_PRESSED){
         padY-=padYVel;
     }
     else if(gameAction==DOWN_PRESSED){
         padY =padYVel;
     }            
}
  

Ответ №1:

getKeyStates() возвращает состояние ключей в одном int. Различные ключи имеют индивидуальные значения. UP_PRESSED = 0x0002 и LEFT_PRESSED = 0x0004. Поэтому, если вы нажмете UP на d-pad во время вызова getKeyStates() , вы получите обратно 2 и if (getKeyStates()==UP_PRESSED) , таким образом, будет true . Аналогично, если вы нажмете ВЛЕВО на d-pad во время вызова getKeyStates() , вы получите 4 обратно.

Но если вы одновременно нажмете ВВЕРХ и ВЛЕВО, вы не сможете вернуть 2 и 4 — потому что это, очевидно, 2 целых числа — и getKeyStates() возвращает только одно целое число.

Однако то, что вы получаете обратно, довольно просто: 2 4 = 6. Таким образом, запрос if (getKeyStates()==6) будет верным, если одновременно нажать ВВЕРХ и ВЛЕВО. Или if (getKeyStates()==UP_PRESSED LEFT_PRESSED) .

Обычно, однако, вы бы попросили использовать битовые операторы, например:

 public void moveJet2() throws IOException{
 int gameAction = getKeyStates();

 if((gameAction amp; LEFT_PRESSED)!=0) {
  padX -= padXVel;
 }
 if((gameAction amp; RIGHT_PRESSED)!=0) {
  padX  = padXVel;
 }
 if((gameAction amp; UP_PRESSED)!=0) {
  padY-=padYVel;
 }
 if((gameAction amp; DOWN_PRESSED)!=0){
  padY =padYVel;
 }            
}
  

Потому что использование этого подхода будет работать с любым из 8 направлений, которые вы можете нажать одновременно.

Комментарии:

1. Большое вам спасибо, мистер 🙂