J2ME 控制 LEFT 和 UP

J2ME Controls LEFT and UP

我正在尝试使用 java 微版本制作 2d 游戏,我只是想让我的控制更顺畅,但问题是当我在按下 UP 键的同时按下 LEFT 键时,情况不起作用我不知道为什么

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

     if(gameAction==LEFT_PRESSED && 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;
     }            
}

getKeyStates() returns 单个 int 中键的状态。各种键具有各自的值。 UP_PRESSED = 0x0002 和 LEFT_PRESSED = 0x0004。因此,如果您在调用 getKeyStates() 时按方向键上的向上键,您将返回 2,因此 if (getKeyStates()==UP_PRESSED) 将为真。 同样,如果您在拨打 getKeyStates() 时按方向键上的左键,您将返回 4。

但是如果你同时按下 UP 和 LEFT,你将无法返回 2 和 4 - 因为那显然是 2 个整数 - 而 getKeyStates() 只有 returns 一个整数。

虽然你得到的结果很简单:2 + 4 = 6。 所以,如果同时按下 UP 和 LEFT,询问 if (getKeyStates()==6) 将为真。或者 if (getKeyStates()==UP_PRESSED+LEFT_PRESSED).

通常情况下,您会要求使用位运算符,如下所示:

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

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

因为使用该方法将适用于您可以同时按下的 8 个方向中的任何一个。