Frage von thatsnotmaria, 31

Wie kann ich in Java und Processing verhindern, dass meine Animation "stockt", also hinterher hängt?

Hallo, ich programmiere gerade für die Uni ein kleines Sonnensystem in Eclipse mit Hilfe von Processing und Java. Das Problem ist, je aufwendiger das Ganze wird, desto mehr beginnt das Programm zu hängen, also anstatt dass die Planeten schön gleichmäßig in ihrer Bahn laufen, ruckelt es mehr und mehr. Kann mir jemand einen Tipp geben mit welchem Befehl man das ändern könnte und das Ganze wieder schön smooth läuft?

Schonmal Danke im Voraus!

Antwort
von PeterKremsner, 31

Im Prinzip kannst du nur versuchen die Rechnungen zu optimieren, also unnötige Rechnungen vermeiden.

Du kannst noch versuchen jeden Planeten in einem eigenen Thread zu berechnen und dann mittels Callback bzw Observer Pattern die neuen Koordinaten an den Zeichenthread zu übergeben.

Expertenantwort
von KnusperPudding, Community-Experte für Java, 10

Mit einem einfachen Befehl ist die Sache nicht getan, zumal wir auch deinen Code nicht kennen. 

- Du wirst an einer anderen Stelle ein Problem haben, behandelst du jeden Planeten als Thread? Ich nehme mal an. Nachdem die wohl 'endlos' Kreisen, hast du hier wohl auch eine Endlos-Schleife, korrekt? Und das Pro Thread. - Führst du Berechnungen innerhalb der Endlosschleife durch?

Führst du die Berechnung der Koordinaten Beispielweise der Schleife durch, wird vor jedem neuen Punkt die Koordinate neu berechnet. Demnach solltest du die Koordinaten vorher berechnen lassen, und wärend der Schleife nur noch abfragen. z.B. in einem Set Speichern und per Iteration die nächste Koordinate abfragen.

Solltest du das bereits gemacht haben, kannst du mal testen in jedem Thread eine kurze pause von wenigen Millisekunden (10-20) einzubauen. z.B. Thread.sleep(20). 

Antwort
von J0T4T4, 17

Wie PeterKremsner schon erwähnt hat, geht das über das weglassen von unnötigen Rechnungen oder eben Multithreading. Andere Wege wären eine bessere Hardware und eine andere Sprache (C++ ist in den meisten Fällen schneller) bzw. Grafikanbindung (kenne mich nicht in Java aus, und weiß nicht, ob du dir da noch ne extra Bibliothek für nimmst)

Die Frage ist da aber, ob du dort wirklich etwas ändern möchtest. Fest steht jedoch, dass es keine Funktion wie MakeJavaRunUltraSmooth() gibt, mit sich das einfach machen ließe.

Antwort
von JuicyLuisian, 13

Vieleicht kann dir das ein wenig weiter helfen: https://www.spieleprogrammierer.de/wiki/Framerate-unabh%C3%A4ngige_Spiellogik

Keine passende Antwort gefunden?

Fragen Sie die Community