私は宇宙船ベースのゲームを構築していますが、フォースのスカイロケットが無限大になる断続的な問題があります。問題はこれらの関係船に関連していると思います:
- 加速度は力に依存します
- 速度は加速度に依存します
- 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;