3

私は宇宙船ベースのゲームを構築していますが、フォースのスカイロケットが無限大になる断続的な問題があります。問題はこれらの関係船に関連していると思います:

  • 加速度は力に依存します
  • 速度は加速度に依存します
  • DragForce(Force)はVelocityに依存します

これが船のゲームです: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方程式はうまく見えます。ただし、dragForceに-1を掛けているので、減算ではなく加算してください。

于 2012-11-01T21:02:47.383 に答える