Я создал игру JavaScript, в которой мой автомобиль перемещается по карте, и теперь мне нужно встроить логику столкновений c. На сегодняшний день я попытался предсказать столкновения перед автомобилем, проверив, какому набору тайлов он соответствует. Код для этого можно увидеть ниже.
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 в демонстрацию.