Java j2me2d-碰撞检测

Java j2me2d-碰撞检测,java,java-me,lcdui,Java,Java Me,Lcdui,我正在为手机制作自己的游戏:2D图形、士兵移动和射击。我有麻烦了。我有两个铺瓷砖的人。第一个是地面,第二个包含墙、树等。我如何检测与放置在第二个平铺层上的这些对象的碰撞?我试过这样做:如果发生碰撞,保持向后移动。这是错误的。我向前移动,这里是墙:向上按-好,士兵下降。但当按下“左”键时,士兵应该向左走(我知道这样写的代码) 但是,它是怎么写的 public void run() { while(true) { int keyState = getKeyStates();

我正在为手机制作自己的游戏:2D图形、士兵移动和射击。我有麻烦了。我有两个铺瓷砖的人。第一个是地面,第二个包含墙、树等。我如何检测与放置在第二个平铺层上的这些对象的碰撞?我试过这样做:如果发生碰撞,保持向后移动。这是错误的。我向前移动,这里是墙:向上按-好,士兵下降。但当按下“左”键时,士兵应该向左走(我知道这样写的代码)

但是,它是怎么写的

 public void run() {
   while(true) {
    int keyState = getKeyStates();
       if ((keyState & LEFT_PRESSED) != 0) {
           soldier.setTransform(Sprite.TRANS_ROT270);
            if(!(soldier.collidesWith(traps, false))) {
             soldier.move(-10, 0);
           } else {
        if((keyState & LEFT_PRESSED) != 0) soldier.move(10, 0);
    }
  }  else if ((keyState & UP_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_NONE);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(0, -10);
       } else {
        if((keyState & UP_PRESSED) != 0) soldier.move(0, 10);
    }
  }  else if ((keyState & DOWN_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_ROT180);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(0, 10);
       } else {
        if((keyState & DOWN_PRESSED) != 0) soldier.move(0, -10);
    }
  }  else if ((keyState & RIGHT_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_ROT90);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(10, 0);
       } else {
        if((keyState & RIGHT_PRESSED) != 0) soldier.move(-10, 0);
    }
  } else if((keyState & FIRE_PRESSED) != 0) {
    createBullet();
  }
考虑并添加日志语句,以便更容易调试您描述的问题

…怎么写的

 public void run() {
   while(true) {
    int keyState = getKeyStates();
       if ((keyState & LEFT_PRESSED) != 0) {
           soldier.setTransform(Sprite.TRANS_ROT270);
            if(!(soldier.collidesWith(traps, false))) {
             soldier.move(-10, 0);
           } else {
        if((keyState & LEFT_PRESSED) != 0) soldier.move(10, 0);
    }
  }  else if ((keyState & UP_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_NONE);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(0, -10);
       } else {
        if((keyState & UP_PRESSED) != 0) soldier.move(0, 10);
    }
  }  else if ((keyState & DOWN_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_ROT180);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(0, 10);
       } else {
        if((keyState & DOWN_PRESSED) != 0) soldier.move(0, -10);
    }
  }  else if ((keyState & RIGHT_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_ROT90);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(10, 0);
       } else {
        if((keyState & RIGHT_PRESSED) != 0) soldier.move(-10, 0);
    }
  } else if((keyState & FIRE_PRESSED) != 0) {
    createBullet();
  }
下面是关于我如何

…在以下特定的一个角落里到底出了什么问题:

考虑并添加日志语句,以便更容易调试您描述的问题

…怎么写的

 public void run() {
   while(true) {
    int keyState = getKeyStates();
       if ((keyState & LEFT_PRESSED) != 0) {
           soldier.setTransform(Sprite.TRANS_ROT270);
            if(!(soldier.collidesWith(traps, false))) {
             soldier.move(-10, 0);
           } else {
        if((keyState & LEFT_PRESSED) != 0) soldier.move(10, 0);
    }
  }  else if ((keyState & UP_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_NONE);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(0, -10);
       } else {
        if((keyState & UP_PRESSED) != 0) soldier.move(0, 10);
    }
  }  else if ((keyState & DOWN_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_ROT180);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(0, 10);
       } else {
        if((keyState & DOWN_PRESSED) != 0) soldier.move(0, -10);
    }
  }  else if ((keyState & RIGHT_PRESSED) != 0) {
      soldier.setTransform(Sprite.TRANS_ROT90);
       if(!(soldier.collidesWith(traps, false))) {
        soldier.move(10, 0);
       } else {
        if((keyState & RIGHT_PRESSED) != 0) soldier.move(-10, 0);
    }
  } else if((keyState & FIRE_PRESSED) != 0) {
    createBullet();
  }
下面是关于我如何

…在以下特定的一个角落里到底出了什么问题:


请发布有问题的代码片段请发布有问题的代码片段with@DamianCzapiewski没什么意思。我当然错过了多次调用(也可能是collidesWith())的副作用的使用方式,但这会导致它以不同的方式移动,而不是完全停止。你触发显示器刷新了吗?@Damianzapiewski移动起来并不有趣。我当然错过了多次调用(也可能是collidesWith())的副作用的使用方式,但这会导致它以不同的方式移动,而不是完全停止。是否触发显示刷新?