我试图制作经典的炸弹人游戏,所以我有角色形象和瓷砖(块)。我用方法collision
检测碰撞,当字符与某个图块(块)相交时,它返回true。
角色运动如下:
public void moveUp() {
yMove = -SPEED;
}// and other similar to other directions
public void update() {// this is called in cyclus
y += yMove;
x += xMove;
if (collision() == true) {
if (isMovingUp()) {
y -= yMove;
}
if (isMovingDown()) {
y += -yMove;
}
if (isMovingLeft()) {
x -= xMove;
}
if (isMovingRight()) {
x += -xMove;
}
}
}
如果我只使用1个箭头,这是有效的。如果我按下2个箭头(例如,我按下向右,我可以向下但是我不能向右移动,角色停留在当前位置 - >它应该向下移动),如果我按下3个箭头(左,右,下)我甚至可以穿过墙壁..
有什么想法吗?感谢。
编辑:碰撞方法:
public boolean collision() {
playerRect = new Rectangle(x, y, PLAYER_WIDTH, PLAYER_HEIGHT);
for(int i = 0; i < map.length; i++) {
for(int j = 0; j < map[0].length; j++) {
if(map[j][i].getType() >= 1) {
Rectangle tileRect = new Rectangle(i*32, j*32, 32, 32);
rect.add(tileRect);
}
}
}
for(Rectangle collision : rect) {
if(collision.intersects(playerRect)) {
return true;
}
}
return false;
}