J2ME控制LEFT和UP

时间:2016-10-02 11:59:35

标签: java java-me midlet

我试图使用java微创建立一个2D游戏,我只是想让我的控制更顺畅但问题是当我按下左键同时按下UP键时条件不起作用我不知道为什么

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;
     }            
}

1 个答案:

答案 0 :(得分:1)

getKeyStates()返回单个int中的键状态。各种键具有单独的值。 UP_PRESSED = 0x0002,LEFT_PRESSED = 0x0004。因此,如果您在拨打getKeyStates()时按住D-pad上的UP,则会返回2,因此if (getKeyStates()==UP_PRESSED)将成立。 同样,如果您在拨打getKeyStates()时按住D-pad上的LEFT,则会返回4。

但是如果你同时按下向上和向左,你就不能回到2和4 - 因为那显然是2个 - 而getKeyStates()只返回一个int。

你回来做的很简单:2 + 4 = 6。 因此,如果同时按下向上和向左,则询问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个方向中的任何一个。