我正在尝试使用 java microedition 制作一个 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()
在单个 int 中返回键的状态。各种键具有各自的值。 UP_PRESSED = 0x0002 和 LEFT_PRESSED = 0x0004。因此,如果您在调用 getKeyStates()
时在方向键上按向上键,您将返回 2,因此 if (getKeyStates()==UP_PRESSED)
将是真的。
同样,如果您在调用 getKeyStates()
时按方向键上的左键,您将返回 4。
但是如果您同时按下 UP 和 LEFT,您将无法取回 2 和 4 - 因为那显然是 2 个整数 - 而 getKeyStates()
只返回一个整数。
不过,您得到的结果相当简单: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 个方向中的任何一个。
关于java - J2ME 控制 LEFT 和 UP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39816770/