私は作っているゲームを持っています。私は2つのスプライトを持っており、AとBと呼んでいます。これまでは、AをBの位置に簡単に移動させました.Bの位置を取得し、X座標がAのX座標より大きい場合は、Aの速度をX位置に追加します。 AとYの位置よりもX位置が小さい位置で繰り返す。私はまた、古いものを保存し、いくつかの単純な三角法を使って回転を設定することで、Aの方向を指しています。しかし、今は他のすべてのものが動作しているので、これをもう少し現実的にしたいと思っています。 BがAの左の点からAの右の点に素早く移動するとき、Aの角度および動きは、指している動きから左下に移動することから急速に飛びます。私はスムーズに動かす必要がある。私はAが角度を変えることができる速度を遅くすることを考えていましたが、それは問題を解決しないでしょうし、ちょっとした動きを横取りしてしまいます。私はこれが長い質問であり、私は多くの答えを得られないかもしれないことに気付いています。ありがとう!XNAムーブメント物理学とトラッキング
0
A
答えて
2
私はあなたがpredator-prey systemを構築しようとしていると思います。これらは通常微分方程式でモデル化されますが、単純なシミュレーションアルゴリズムはhereです。
0
瞬時にではなく、時間の経過とともにLerping(線形補間)AのBの追跡をお勧めします。実際に直面している位置であるA
にVector2を格納し、各フレームに特定の量(B
)をハードコードされた角度または一定の割合で指定します。
ここでは、現在の位置を目的の位置に向かって移動するサンプルコードを示します。上記の例では
Vector3 current = Vector3.Zero;
Vector3 desired = new Vector3(10, 0, -5);
// For this example we will lerp 75% of the way from 'current' to 'desired' per second
Vector3 LerpTowardDesired(Vector3 current, Vector3 desired, float timeDelta)
{
float lerpPercentage = timeDelta * 0.75f;
Vector3 newPos = Vector3.Zero;
newPos.x = MathHelper.Lerp(current.x, desired.x, lerpPercentage);
newPos.y = MathHelper.Lerp(current.y, desired.y, lerpPercentage);
newPos.z = MathHelper.Lerp(current.z, desired.z, lerpPercentage);
}
あなたは単にtimeDelta
として秒経過時間を渡し、1フレームに1回LerpTowardDesired
を呼び出します。通知timeDelta
はfloat型であるため、渡される秒数には部分的な秒数が含まれます(例:0.016は1/60秒を表します。したがって、最も近い秒に丸めずに0を渡すことはありません)。
上記で定義したcurrent
とdesired
のベクトルを使用すると、結果は完璧な60fps(フレーム/秒)を想定して、数フレームの間になります。
// After frame 1
current = LerpTowardDesired(current, desired, 0.016f);
// current is now (0.12f, 0.0f, -0.06f)
// After frame 2
current = LerpTowardDesired(current, desired, 0.016f);
// current is now (0.239f, 0.0f, -0.119f)
// After frame 3
current = LerpTowardDesired(current, desired, 0.016f);
// current is now (0.356f, 0.0f, -0.178f)
あなたが3以上のフレームを見ることができるようにcurrent
位置がdesired
位置に向かって移動を開始しました。あなたのスプライトが常にcurrent
の位置に向くようにするなら、彼は即座にではなく、時間の経過とともにターゲットスプライトを追跡するべきです。
フレームごとにハードコーディングされた角度ではなく、パーセンテージを使用することの最も良い点は、ターゲットが移動する速度が速ければ速いほど、より大きなものと同じパーセンテージになるため、距離。つまり、A
は、どんなに速くてもB
に常に追いついていきます。
関連する問題
- 1. XNA水物理学
- 2. Xnaベクトルと物理シミュレーション
- 3. 物理学にHaskellで
- 4. クリケット物理学、基本シミュレーション
- 5. 3D卓球物理学の部分?
- 6. Android用ベスト2dゲームエンジン[物理学]
- 7. 弾丸物理学Broadphase複合体
- 8. 計算物理学、FFT解析
- 9. iPhoneゲーム "Paper Toss"プログラミング物理学
- 10. タイルマップ2D現実的流体物理学
- 11. 弾丸物理学MultiSphereShapeの使用
- 12. ゲーミングアプリケーションのための物理学電磁気学のシミュレーション
- 13. HTML5キャンバス - ボール物理学との衝突グリッチ
- 14. XNAのフォトショップブレンドの数学
- 15. 決定木学習と不純物
- 16. Javaゲーム、バウンス&ムーブメント
- 17. 物理定数と数学定数のライブラリと基本変換をC#.net
- 18. XNAのリソースとコンテンツ管理
- 19. b2物理学をシミュレートしていなかった人
- 20. GIM_TRIANGLE :: is_point_insideが間違っています(弾丸物理学)
- 21. マルチプレイヤーゲームで物理学を同期する方法は?
- 22. 物理デバイスのスウィフトで背景位置のトラッキングが動作しない
- 23. C#XNAムーブメント - 両方を回すことも移動することもできません。
- 24. は、例えば iが5シリーズ</p> <p>物理学、化学、数学を持っ軸Y軸
- 25. タイル張りのムーブメント
- 26. 私は、C#/ XNAで物理エンジンを作っていますC#/ XNAで衝突検出のための
- 27. ゲームでのベクトルと物理
- 28. 物理エンジンWPF
- 29. 物理フォントjava?
- 30. スヌーカーゲームの物理