Answers:
这是一个非常简化的版本,但对大多数街机类型的游戏来说都不错。您需要以下属性:
positionX, positionY - where the car is
velocityX, velocityY - speed on each axis
drag - how fast the car slows down
angle - the rotation of the car, in radians
angularVelocity - speed the car is spinning, in radians
angularDrag - how fast the car stops spinning
power - how fast car can accelerate
turnSpeed - how fast to turn
每帧:
positionX += velocityX
positionY += velocityY
velocityX *= drag
velocityY *= drag
angle += angularVelocity
angularVelocity *= angularDrag
加速
velocityX += sin(angle) * power;
velocityY += cos(angle) * power;
向左转
angularVelocity -= turnSpeed;
引导正确
angularVelocity += turnSpeed;
为了获得良好的漂移,请将drag和angularDrag设置为非常接近1,例如0.9
我今天正在阅读一篇论文,该论文模拟了碰撞和旋转时的一些车辆动力学:
荆州 剑波路 彭辉,“车辆动力学对精确固定技术的反应”,2008年ASME动力系统与控制会议论文集
它包含一个物理模型,该模型表示侧倾力矩和故意碰撞力引起的偏航期间后轮胎牵引力的损失。对于对碰撞期间的车辆动力学感兴趣的游戏程序员来说,这似乎很有趣。
您需要了解的第一件事是“滑移率”和“牵引圈”。滑移率非常适合轮胎性能,在角度差和轮胎横向力之间具有非线性关系。它还为您提供驾驶员扭矩反馈信息(用于力反馈方向盘)。
这两个概念的超级简单形式如下:滚动方向和运动方向之间的角度差越大,垂直于滚动方向的力(横向力)就越大。如果轮胎角度增加,它会在(通常)5°至8°达到峰值,然后从那里掉落。
牵引圆基本上是一种限制器,可限制任何超出其的力矢量。它模拟了剧烈的加速/制动会降低转向能力的方式,反之亦然。牵引圆的大小(最大牵引力矢量)与将轮胎压到地面上的力成比例。
您需要分别将横向(转向)力与驱动/制动(旋转)转矩以及与地面相反的牵引力建模。