2016-10-02 75 views
2

我正在尝试使用java microedition制作2D游戏,我只是想让我的控制更流畅,但问题是当我按下UP键时按下LEFT键条件不起作用不知道为什么J2ME Con​​trols Left and 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

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

但是如果你同时按UP和LEFT,你不能回到2和4 - 因为这显然是2个整数 - 而getKeyStates()只返回一个int。

虽然你做的回复很简单: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个方向,你可以在同一时间按下的工作。

+0

非常感谢你先生:) – xFaceless