java - J2ME 控制 LEFT 和 UP

标签 java java-me midlet

我正在尝试使用 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/

相关文章:

java - 这个版本的 findViewById() 是如何工作的?

java - 在java中实现Graph对象

java - LWUIT 组合框 : Class as the Items

java-me - 在我的 J2ME 应用程序中从服务器获取定期更新

java - 无法在 Eclipse 错误中启动多个 MIDlet?

java - 如何使用列表中选定的值?

java - 为什么在大型数组上使用 Arrays.sort(Object[] a) 时没有出现 StackOverflowError?

java - 绘制玻璃状按钮

java-me - Midlet 在 S40 中与 verisign securityexception 签署

java - Hecl 脚本是否与 native J2ME midlet 一样强大?