汽车四面八方的越野车

问题描述 投票:0回答:1

我创建了一个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进行演示。

javascript game-physics
1个回答
0
投票

[如果您确信汽车每帧的移动量将少于瓷砖,则可以先计算汽车的新坐标,然后检查它是否与实心瓷砖重叠。如果会重叠,则不要费心移动它(并把速度估计为零)。

这样,您的碰撞检测将无需推断汽车行驶的方向。应该简化一下。

© www.soinside.com 2019 - 2024. All rights reserved.