2

背景情報を提供するために、私は現在 Java コードのピンボール ゲームに取り組んでいます。私はそれをMVC設計モデルに保管しています。衝突、重力、摩擦などを処理できるかなり現実的な物理システムを備えています。現在、システムは 20 FPS システムで実行されています。

私が抱えている問題は、システム内の衝突をチェックする物理ループが、ボールの現在の速度を使用して次の衝突までの時間を計算するメソッドを実行することによって機能することです。これが機能する最も効果的な方法は、チェックを実行し続けて、チェック間のボールの動きを考慮してできるだけ正確にすることです。衝突までの時間が次のチェックまでの時間よりも短い場合は、その後、衝突を実行します。

しかし、現在私が使用しているシステムは、1 秒あたり 20 回しかループを実行できません。これでは、特にボールの発射などの高加速時に、期待どおりの正確な結果が得られません。

私が使用するタイマー ループは MVC のコントローラー セクションにあり、モデル内にある物理セクションを呼び出します。物理システムが使用できるコントローラーでメソッドが呼び出された時点の残り時間を渡すことができますが、次の画面更新までの残り時間を追跡しながらループを複数回実行する方法がわかりませんか?

理想的には、これを画面の更新ごとに少なくとも 10 回実行したいと考えています。さらに情報が必要な場合は、お尋ねください。

助けてくれてありがとう。

4

1 に答える 1

0

実際の問題は、衝突がいつ発生し、次のフレーム更新がいつ発生するかわからないことです。

これらは別々の実行中のタスクであるべきではありませんか? 衝突検出を管理する 1 つのスレッドと更新を行うスレッドは? 各スレッドは独自の間隔 (Timer.addTask(...)) で実行でき、レンダー スレッドの実行時にコリジョン/ロケーションの更新が実行されないように適切に同期する必要があります。

これがあなたの質問に答えることを願っています。

よろしく、ロブ。

于 2013-03-27T08:42:27.303 に答える