基本的にnティックごとに実行されるループを求めていますか? これはTimerのように聞こえます。BCL にはいくつかのタイマーがあります。サーバー用のタイマーまたはWindow Forms 用のタイマー。
これらの線に沿ってそれらを使用できます。以下は擬似コードであり、これがどのように行われるかを一般的に示すことを意図しています。つまり、コピーして貼り付けるだけではおそらくコンパイルされません。
public class RepeatingTask
{
public MyObjectState _objectState;
public RepeatingTask(Timespan interval)
{
Timer timer=new Timer(Timer_Tick); //This assumes we pass a delegate. Each timer is different. Refer to MSDN for proper usage
timer.Interval=interval;
timer.Start();
}
private DateTime _lastFire;
private void Timer_Tick()
{
DateTime curTime=DateTime.Now();
DateTime timeSinceLastFire = curTime-lastFireTime;
_lastFire=DateTime.Now(); //Store when we last fired...
accumulatedtime+=timeSinceLastFire
while(accumulatedtime>=physicsInterval)
{
Update(physicsInterval);
accumulated-=physicInterval;
}
}
}
クロージャーを使用して、タイマーが定義されているメソッドの状態をラップすることもできます。
編集
記事を読み、問題を理解しました。ただし、タイマーを使用することもできますが、彼が示すように、物理エンジンを設定した間隔ごとにエンジンを呼び出すように関数を設定する必要があります。
WPF を使用していますか? doign アニメーションの安定した速度で発生すると思われるイベントがいくつかあります。
編集
私の解釈を示すためにコード サンプルを更新しましたが、基本的に行うことは、物理エンジンの間隔を定義することです。次に、「ループ/タイマーは何でも」を通過するたびに行う必要があるのは、それ以降に経過したリアルタイム時間を決定することです。最後の反復。次に、そのデルタをアキュマレーターに保存します。これを使用して、最後に呼び出してから逃したすべての間隔で物理エンジンを呼び出すまでカウントダウンします。
私が苦労しているのは、ここでタイマーを使用する方が良い場合、専用スレッドをスリープ状態にするか、その他の実装を行うことです。