X
Nah einigen basteleien habe ich einen guten Ansatz gefunden der meinem Quadrat zu flüssiger Bewegung verhiflt, allerdings stimmt da noch irgendetwas nicht so ganz, hier ist ein Pseudocode wie ichd as ganze aufgebaut habe:
int logicschleife; //beide über QueryPerformanceCounter als angabe mit 1=1ms
int aktuellezeit;
while(true)//Schleife für Windowsnachrichten, Rendern, logic usw
{
Windowsnachrichten();
Logicschleife
{
//aktuelel zeit hier holen
if(logicschleife<aktuellezeit)
//abfrage ob genug zeit vergangen ist um logicschleife auszuführen
{
if(logicschleife+40<aktuellezeit)
//hier errechnen falls mehr als eine
//logicschleife hinetreinander kommen würde, durch niedrige fps
else
//hier angeben das die logicshcleife nur 1x ausgeführt wird
Tastenabfragen();
//hier bewegungsgeschwindigkeit anpassen, falls mehr als eine
//logicschleife komemn solte um bewegung pro frame zu beschleunigen
//hier errechnen wieviel fps bis zur nächsten logicschleife kommen
//würden und somit die geschwindigkeit pro frame einstellen
};
};
Rendern();//hier wird die geschwindigkeit pro frame genutzt um die aktuelle
//position des Quadrates anzugeben
};
Das ganze funktioniert auch, die Sache hat nur einen haken, das Quadrat macht gelegentlich einen ruck, dh es bewegt sich flüssig dann kommt ein ruck als wenn es mehrere frames überspringt, ich habe einen counter geadded und die Framezahl die in der Logicerrechnet wird stimmt +-2 mit der tatsächlichen fps überein, dennoch ist auf allen Rechnern der ruck zu sehen, auf langsammen tritt er sogar etwas häufiger auf, das ganze ist komplett zufällig, ich hatte es auch versucht anhand der FPS einmal pro Sekunde den Speed pro Frame des Quadrats neu zu berechnen, statt den Speed pro logic auf die nächsten frames zu verteilen, leider brachte das auch keinen Erfolg. Hat da evtl jemand eine Idee woran das liegen könnte?