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 个方向中的任何一个。
我正在尝试使用 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 个方向中的任何一个。