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