Zwei Threads miteinander laufen lassen

Eichelhäer

Bekanntes Mitglied
Hallo,

folgendes Problem:

Ich möchte eine Spielfigur so bewegen, dass sie einem Pfad aus A* folgt.

Zuerst dachte ich das wäre einfach, doch das ist nicht wirklich trivial.
Mittlerweile bin ich bei der Idee angelangt mit mehreren Threads (2) zu arbeiten, um die Spielfigur zu bewegen.

Meine Map besteht aus 32x32 großen Tiles. Wenn ich den Pfad via A* mit dieser Größe berechnen lasse ist der Algorithmus zur Laufzeit wesentlich schneller als mit 1x1 großen Knoten.
Außerdem ergibt sich mit 32x32 eine einfachere Kollisionsverarbeitung.
So, nun hab ich mir überlegt einen Thread im 2 Sekunden Takt jeweils den folgenden Knoten des Pfades berechnen zu lassen und einen zweiten Thread dafür zu nutzen den Spieler mit der üblichen Vorgehensweise solange zu nachzuziegen bis der Spieler in 2 Sekunden den vorübergehenden Zielknoten erreicht hat. Dieser zweite Thread läuft daher auf z.B. 60 frames, um eine flüssige Bewegung zu erzielen. Das ist zwar Hardcoding aber mir fällt nicht wirklich etwas anderes. effektiveres ein.

Meine Frage ist zuerst mal: Ist dieser Ansatz grundsätzlich machbar, oder kann ich diese Idee total in die Tonne treten, denn ich befürchte starke Performanceprobleme zur Laufzeit.

Ein anderer Ansatz, den ich verfolge ist mit zwei einfachen Timern zu arbeiten.

Was ist besser, oder ist das Geschmackssache?

Gruß Eichelhaer
 

Jardcore

Top Contributor
Grundsätzlich benötigt man in den seltensten Fällen Multithreading. Ist bei mir schon etwas her, aber A* funktioniert wunderbar ohne Multithreading.

Meine Figur lief damals in einer Schleife, die abgebrochen wurde, wenn die Figur das Ende des Pfades erreicht hatte. In einem Spiel ist die Schleife dann natürlich der GameLoop und die Figur wird wie auch immer ein Update bekommen und ihren nächsten Knoten auf dem Pfad berechnen.

Je nachdem was genau du vorhast könnte deine Figur die ersten paar Zyklen das Update benutzten um den Pfad zu bauen und wenn dieser vollständig ist ihn abfahren / gehen / fliegen / schwimmen... usw. :)
 

Eichelhäer

Bekanntes Mitglied
Aber wie????

Entweder ich hab ein riesiges Brett vorm Kopf oder mach irgendwas falsch, denn wenn ich den Pfad in einer erweiterten for-Schleife in der update Methode komplett berechne und anschließend die x-bzw y Werte zuweisen will springt der Spieler sofort zum zielpunkt. und wenn ich das pro frame mache dauert es ewig und drei tage bis der spieler am ziel ist. Grundsätzlich weiss ich wie man z.B. ein Rechteck bewegt, aber ein Rechteck nach einem vorgebenen x-bzw y wert flüssig zu bewegen, indem man die werte einzeln zuweist pro tick, ist doch da die einzige möglichkeit oder irre ich mich da total?

Habe erklärungsbedarf.....

Gruß Eichelhaer
 

mrBrown

Super-Moderator
Mitarbeiter
Ja, je Zeiteinheit ein kleiner Teil der Bewegung, das ist dann der einzige Thread (=GameLoop von oben).
Den Pfad berechnet man einmal, und hat ihn ja dann, parallel muss da nichts laufen.
 

Jardcore

Top Contributor
Du klickst, bekommst die Zielkoordinaten.
A* berechnet den Pfad und Packt die Knoten auf einen Stack.
Figur nimmt sich pro Zeiteinheit ein Knoten vom Stack und bewegt sich dorthin.
Wenn du in der Zeit irgendwo neu hinklickst wird der Stack neu berechnet.
 

Eichelhäer

Bekanntes Mitglied
HHHHHH!!!

Bin so ein Rindviech.

Habe es gestern bereits noch selbst rausgefunden meld mich heut aber trotzdem nochmal.
Sinnloses Thema von mir total unnötig. Entschuldigung. Ich glaub ich schlafe zu wenig.

Funktioniert jetzt alles.


Thema hiermit geschlossen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Java zwei gleiche Threads mit unterschiedlichen Parametern Spiele- und Multimedia-Programmierung 2
S intersect von zwei Rechtecken Spiele- und Multimedia-Programmierung 8
N Kollision von zwei ImageIcons Spiele- und Multimedia-Programmierung 8
S 3D-Kollision mit zwei ArrayLists Spiele- und Multimedia-Programmierung 7
H zwei ints als key in map (ohne long) Spiele- und Multimedia-Programmierung 16
P Sound auf zwei Lautsprechern getrennt abspielen Spiele- und Multimedia-Programmierung 9
B 1)JButtons zeichnen 2)Kolisionsabfrage von zwei Objekten Spiele- und Multimedia-Programmierung 9
V Winkel zwischen zwei Vektoren Spiele- und Multimedia-Programmierung 1
A Mit KeyListener zwei Tasten gleichzeitig abfragen Spiele- und Multimedia-Programmierung 2
D Zwei Fragen (Exponential Fog und Schein-nach-außen-Effekt) Spiele- und Multimedia-Programmierung 6
Redfrettchen Tastatur für zwei Spieler teilen? Spiele- und Multimedia-Programmierung 8
S ständig neue Threads Spiele- und Multimedia-Programmierung 4
Z Objekte animieren mit Threads Spiele- und Multimedia-Programmierung 4
M Minecraft Minecraft, MySQL und Threads Spiele- und Multimedia-Programmierung 12
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
L Synchronisierung von Threads die Antwort? Spiele- und Multimedia-Programmierung 8
J Frage zu Threads Spiele- und Multimedia-Programmierung 5
I Problem mit Threads Spiele- und Multimedia-Programmierung 25
L Threads: Denkzeit-Timer Spiele- und Multimedia-Programmierung 3
Tapsi Thread wartet auf Threads Spiele- und Multimedia-Programmierung 7
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
0 Problem mit zeitsynchroner Hauptschleife/Threads Spiele- und Multimedia-Programmierung 28
D threads in j3d? Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben