Demandez-vous une boucle qui fonctionnera pratiquement toutes les tiques? Cela ressemble à un Timer. Il y a quelques minuteries dans la BCL. A timer for servers ou un for Window Forms.
Vous pouvez les utiliser selon ces lignes. Ce qui suit est code de pseudo et destiné à montrer généralement comment cela est fait. En d'autres termes, il ne compilera probablement pas si vous copiez et collez. .
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;
}
}
}
Vous pouvez également utiliser une fermeture pour envelopper votre état de la méthode que la minuterie est définie dans
Modifier
J'ai lu l'article et je comprends la question; Cependant, vous pouvez toujours utiliser une minuterie, mais vous devez, comme il l'indique, définir votre fonction pour appeler les moteurs pour chaque intervalle auquel vous avez défini votre moteur physique.
Etes-vous en utilisant WPF, ils ont certains événements qui, je crois, se déclencher à des taux réguliers pour les animations de doign.
Modifier
Je mis à jour mon exemple de code pour vous montrer mon interprétation, mais essentiellement ce que vous faites est de définir un intervalle pour votre moteur physique, et ce que vous devez faire à chaque passage à travers votre « boucle/minuterie tout "détermine le temps réel passé depuis la dernière itération. Vous stockez ensuite ce delta dans un Accumalator, que vous utiliserez pour compter jusqu'à ce que vous ayez appelé votre moteur physique pour tous les intervalles que vous avez manqués depuis votre dernier appel. Ce qui me pose problème est de savoir si l'utilisation d'une minuterie ici est préférable, puis d'avoir un thread dédicacé en sommeil, ou une autre implémentation.
Quel framerate essayez-vous d'atteindre? Cela affecte la meilleure méthode de façon spectaculaire. –