我创建了一个JavaScript游戏,我的车辆在地图上四处移动,现在需要构建碰撞逻辑。迄今为止,我已经尝试通过查看汽车对应的图块来预测汽车前方的碰撞。可以在下面看到此代码。
Game.update = function () {
const x = this.car.x;
const y = this.car.y;
if (Keyboard.isDown(Keyboard.LEFT)) {
Car.moveAngle = -1
this._rotate(Car.moveAngle)
}
else if (Keyboard.isDown(Keyboard.RIGHT)) {
Car.moveAngle = 1
this._rotate(Car.moveAngle)
}
else if (Keyboard.isDown(Keyboard.UP)) {
Car.frontCollision = !isCarInFrontCollision(x, y)
Car.rearCollision = !isCarInRearCollision(x, y)
if (!Car.frontCollision || Car.rearCollision) {
Car.speed = 2
this.car.move();
}
}
else if (Keyboard.isDown(Keyboard.DOWN)) {
Car.frontCollision = !isCarInFrontCollision(x, y)
Car.rearCollision = !isCarInRearCollision(x, y)
if (!Car.rearCollision || Car.frontCollision) {
Car.speed = -2
this.car.move();
}
}
else {
decelerate();
}
this.camera.update();
};
function isCarInRearCollision(x, y) {
return !map.isSolidTileAtBottom(x, y)
}
function isCarInFrontCollision(x, y) {
return !map.isSolidTileAtTop(x, y)
}
此(sorta)在汽车向北或向南行驶时,可以很好地用于前后碰撞。但是它仍然有点狡猾。其次,我似乎无法弄清楚如何使地图的东西两侧的瓷砖发生碰撞。是否有比我现在正在做的更好的方法?
我已将全部代码推送到此处:https://plnkr.co/edit/pfm9V5y1SyL3aQIo进行演示。
[如果您确信汽车每帧的移动量将少于瓷砖,则可以先计算汽车的新坐标,然后检查它是否与实心瓷砖重叠。如果会重叠,则不要费心移动它(并把速度估计为零)。
这样,您的碰撞检测将无需推断汽车行驶的方向。应该简化一下。