# Ein Thread für alle Animationen oder mehrere?



## System.exit(0) (28. Dez 2009)

Hallo,

ich habe mich mit Threads beschäftigt und bastele gerade an einem kleinen Spiel für meine Kinder.
Die Frage, die sich mir nun stellt, ist folgende:

Ist es sinnvoll, 
a) nur das Main als einen Thread laufen zu lassen und die Berechnungen der Sprites über dieses Main zu timen 
oder ist es sinnvoller
b) die verschiedenen Sprite-Kategorien (Hintergrund, eigenes Schiff, Aliens, Schüsse) mit jeweils einem eigenen Thread zu versehen, so dass dort die Berechnung der Bewegungen u. ä. flüssiger läuft?

Ich weiß auch, dass es kein Richtig oder Falsch gibt, aber ein paar fundierte Kommentare zu Vor- und Nachteilen würde ich begrüßen.

Gruß

System.exit(0)


----------



## Marco13 (28. Dez 2009)

Was "Das Main" sein soll, weiß ich zwar gerade nicht, aber üblicherweise gibt es bei "kleineren" Spielen EINEN "Game-Thread", der das alles auf einmal behandelt. Erstens ist es in bezug auf die Performance nicht zuträglich, wenn man für 50 Sprites auch 50 Threads hat (und auch nicht für 5 Kategorien 5 Threads), und zweitens kommt man bei so vielen Threads leicht zu Synchronisationsproblemen: Wenn ein Thread die Bewegung der Raumschiffe steuert, und einer die Bewegung der Schüsse, ist es SEHR schwierig, rauszufinden, ob ein Schuss ein Raumschiff getroffen hat, weil die Bewegung erstmal vollkommen unabhängig voneinander passiert. 
Quaxli's Spieletutorial ist auch für solche Sachen ein guter Einstiegspunkt. Dort wird auch beschrieben, wie man z.B. eine Bewegung in "Echtzeit" macht, unabhängig davon, wie schnell der Rechner ist (bzw. wie lange die Berechnungen der Bewegungen oder die Kollisionserkennung laufen).


----------



## SlaterB (28. Dez 2009)

jedes Programm, welches nicht mehrere PCs oder Kerne benutzt, läuft in einem Thread am flüssigsten,
vielleicht von Spezialunterbrechnungen wie Warten aufs Netzwerk/ Festplatte/ Synchronisation mit zwingend nebenläufigen Programmteilen (Swing) abgesehen

Threads für sich bringen überhaupt keine Geschwindigkeits-Verbesserung, 
sie machen nur zusätzliche (Hintergrund-)Arbeit für ihre Verwaltung, Wechsel der Ausführung usw.,
ihr Vorteil liegt in der Organisation, etwa vergleichbar mit unterschiedlichen Klassen/ Methoden für verschiedene Aufgaben

wenn du Code hast a la 
while(true) {
berechne Position und male Bild 1,
berechne Position und male Bild 2,
berechne Position und male Bild 3,
}

dann ist das in einem Thread akzeptabel gegenüber 3 Threads mit

while(true) {
berechne Position und male Bild x,
}

besonders wenn eh alle drei Threads auf die gleichen Takte achten müssten oder von einem repaint() in Swing abhängen


verschiedene Threads sind dann sinnvoll, wenn es wirklich unterschiedliche Aufgaben gibt, am besten noch quer durcheinander,
die in einem großen Code nur noch Gewurstel wären,
Threads sparen da keine Zeit, aber unendlich an Organisation/ Übersicht

wenn eine Aktion X 5 sec dauert und währenddessen 4 andere Aktionen Y zu je 1 sec auch ausgeführt werden sollen 
dann wäre es sehr aufwendig, X in Teile zu zerbrechnen und zwischendurch irgendwelche Bedingungen anzuschauen, ob vielleicht mal ein Y ausgeführt werden könnte


----------

