我和我的朋友正在开发一个自上而下的益智游戏。
我们已经实现了一个可以行走和碰撞墙壁的玩家类,但问题在于碰撞本身。
例如:
当玩家撞到墙壁右侧时,我们将x
轴上的速度设置为0,然后玩家停止。但在那之后,如果用户按下up键,播放器会向上移动一个像素,然后再次停止。
之后,如果你一直交替按右和上,玩家就会一个像素一个像素地穿过墙壁。
这是玩家的碰撞检测:
for (int i = 0; i < lvl.getSizeInTiles().x; i++) {
for (int j = 0; j < lvl.getSizeInTiles().y; j++) {
if (lvl.getTileFromBuffer(i, j).getType() == "wall") {
if (intersects(lvl.getTileFromBuffer(i, j).getPosition().x, lvl.getTileFromBuffer(i, j).getPosition().y, lvl.getTileFromBuffer(i, j).getSize().x, lvl.getTileFromBuffer(i, j).getSize().y)) {
if (faceDirection == "UP" && vel.y < 0) {
collidesUp = true;
}
else {
collidesUp = false;
}
if (faceDirection == "DOWN" && vel.y > 0) {
collidesDown = true;
}
else {
collidesDown = false;
}
if (faceDirection == "LEFT" && vel.x < 0) {
collidesLeft = true;
}
else {
collidesLeft = false;
}
if (faceDirection == "RIGHT" && vel.x > 0) {
collidesRight = true;
}
else {
collidesRight = false;
}
}
}
}
}
}
if (vel.x > 0 && !collidesRight) {
pos.x += vel.x;
}
if (vel.x < 0 && !collidesLeft) {
pos.x += vel.x;
}
if (vel.y > 0 && !collidesDown) {
pos.y += vel.y;
}
if (vel.y < 0 && !collidesUp) {
pos.y += vel.y;
}
快速说明:该intersect(x, y, w, h)
函数是播放器类的一部分,如果您需要查看它,请告诉我们。
如果您回复我们的代码,或者将我们链接到我们可以找到解决方案的地方,我们将很高兴。
因此,感谢您的帮助,如果需要,请提出问题,Arad 和 Ron。