3

我正在构建一个基于太空船的游戏,但我遇到了一个间歇性问题,我的 Force 的天空火箭飞到了无限远。我假设问题与这些关系船有关:

  • 加速度取决于力
  • 速度取决于加速度
  • DragForce(力)取决于速度

这是船游戏:http ://shootr.signalr.net

这是运动背后的物理方程的重新分解(使其不那么大,组合了一些函数)。

double PercentOfSecond = (DateTime.UtcNow - LastUpdated).TotalMilliseconds / 1000;

// Mass = 50
_acceleration += Forces / Mass;

Position += Velocity * PercentOfSecond + _acceleration * PercentOfSecond * PercentOfSecond;
Velocity += _acceleration * PercentOfSecond;

_acceleration = new Vector2();
Forces = new Vector2();

// DRAG_COEFICCIENT = .2,  DRAG_AREA = 5
Vector2 direction = new Vector2(Rotation), // Calculates the normalized vector to represent the rotation
        dragForce = .5 * Velocity * Velocity.Abs() * DRAG_COEFFICIENT * DRAG_AREA * -1;

Forces += direction * ENGINE_POWER; // Engine power = 110000

LastUpdated = DateTime.UtcNow;
4

1 回答 1

1

首先,你有一个不适当的操作,只有当你假设向量被初始化为零向量时才会起作用。例如:

_acceleration += Forces / Mass; // your code
_acceleration = Forces / Mass; // what it should be

你的部队也应该是:

Forces = direction * ENGINE_POWER + dragForce;

如果这对您的问题没有帮助,那么您在计算方向向量时遇到了问题。确保它是标准化的。你的阻力方程看起来不错。但是,请确保添加它而不是减去,因为您已经将 dragForce 乘以 -1。

于 2012-11-01T21:02:47.383 回答