Hallo.
Ich habe hier ein kleines Problem. Und zwar programmier ich gerade ein kleines Lernspiel. Die Animationen werden durch einen Thread ausgeführt, welcher am Ende ein paar Milisekunden mit der Funktion "Thread.sleep()" warten soll um auf eine bestimmte FPS zu kommen. Dieser "Timeout" wird dynamisch Berechnet. Der Wert stimmt auch soweit immer. Das einzige Problem ist nun, dass der Thread beispielsweise 20 Milisekunden warten soll, statt dessen aber 32 ms wartet. Auch wenn ich manuell 20 ms an Thread.sleep(20) übergebe, messe ich an der Stelle einen Timeout von 32 ms. Dadurch wird das Ganze eben wesentlich langsamer Abgespielt.
Hier habe ich mal die Stelle rauskopiert, an der der Thread warten soll:
Vielleicht hat ja jemand von euch eine Idee, woran es liegen kann. Andere Lösungsvorschläge, an dieser Stelle eine Pause von [timeOut] ms einzuhalten sind mir auch Willkommen.
Vielleicht kann mir ja jemand, der Erfahrung mit 2D Animationen hat, diese mit mir teilen und mir erklären, wie er das Animationsproblem löst. Da ich dachte es wäre ziemlich unschön für jede Bewegung, die in Kraft tritt, einen Thread zu erstellen hab mich eben dafür entschieden das ganze in einem Thread zu bearbeiten. Für mich ist das jedoch Neuland und deshalb würde ich gerne wissen, die man so etwas relativ schön und sauber macht.
Ich habe hier ein kleines Problem. Und zwar programmier ich gerade ein kleines Lernspiel. Die Animationen werden durch einen Thread ausgeführt, welcher am Ende ein paar Milisekunden mit der Funktion "Thread.sleep()" warten soll um auf eine bestimmte FPS zu kommen. Dieser "Timeout" wird dynamisch Berechnet. Der Wert stimmt auch soweit immer. Das einzige Problem ist nun, dass der Thread beispielsweise 20 Milisekunden warten soll, statt dessen aber 32 ms wartet. Auch wenn ich manuell 20 ms an Thread.sleep(20) übergebe, messe ich an der Stelle einen Timeout von 32 ms. Dadurch wird das Ganze eben wesentlich langsamer Abgespielt.
Hier habe ich mal die Stelle rauskopiert, an der der Thread warten soll:
Java:
long totalTimeOut = Math.round(1000.0d / FPS);
long timeOut = totalTimeOut - (System.currentTimeMillis() - startTime);
System.out.println("Timeout: " + timeOut); // Bei 50 FPS kommen hier 20 ms raus (momentan gibts nicht viel zu Berrechnen deshalb der ziemlich genaue wert von 20 ms bei 50 FPS)
long time = System.currentTimeMillis();
if(timeOut > 0)
Thread.sleep(timeOut);
System.out.println("Total Timeout: " + (System.currentTimeMillis() - time)); //Hier messe ich allerdings 32 ms
Vielleicht hat ja jemand von euch eine Idee, woran es liegen kann. Andere Lösungsvorschläge, an dieser Stelle eine Pause von [timeOut] ms einzuhalten sind mir auch Willkommen.
Vielleicht kann mir ja jemand, der Erfahrung mit 2D Animationen hat, diese mit mir teilen und mir erklären, wie er das Animationsproblem löst. Da ich dachte es wäre ziemlich unschön für jede Bewegung, die in Kraft tritt, einen Thread zu erstellen hab mich eben dafür entschieden das ganze in einem Thread zu bearbeiten. Für mich ist das jedoch Neuland und deshalb würde ich gerne wissen, die man so etwas relativ schön und sauber macht.
Zuletzt bearbeitet: