我试图使用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;
}
}
答案 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个方向中的任何一个。