我有一个球,我可以在由相同大小的瓷砖组成的地图上四处移动。玩家不应该能够走过较暗且有黑色边框的瓷砖。我有一个多维的瓷砖数组,用于检查哪些瓷砖是实心的。
如果玩家在水平和垂直方向上移动,我希望玩家靠墙滑动。问题是,如果他这样做,他会坚持下去。我设法让它在每个轴上完美地工作,但分开。这是我的水平碰撞检查代码:
if (vx < 0) {
// checks for solid tiles left of the player
if (level.isBlocked(i, j) || level.isBlocked(i, jj)) {
x = side * (i + 1); // moves player to left side of tile
vx = 0;
}
} else if (vx > 0) {
// checks for solid tiles right of the player
if (level.isBlocked(ii, j) || level.isBlocked(ii, jj)) {
x = (ii * side) - getWidth(); // moves player to right side of tile
vx = 0;
}
}
level.isBlocked ()方法检查数组的索引是否被实心图块占用。i和j变量是玩家右上角所在数组中的哪个索引。ii和jj变量是玩家右下角所在数组中的哪个索引。
这很好用,但是如果我在下面添加相同的代码块,但将x替换为y,将vx替换为vy等等,就会出现问题。所以我可以添加水平或垂直碰撞处理,它可以工作,但不能同时进行。我看过一些文章解释我必须将它们分开或其他东西,但我不太了解它们。如何检查两个轴上的碰撞并保持滑动效果?