Zielgesteuerte Bewegung auf Tilemap
Übersicht

![]() |
gochxBetreff: Zielgesteuerte Bewegung auf Tilemap |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
ich hab mal wieder eine Frage: Ich will, das ein Spieler bzw. Gegner auf einer Tilemap sein Ziel selbst findet. Die Tilemap besteht dabei zunächst aus einem zweidimensionalen Array, der zwei Zustände kennt: Weg frei oder Hindernis (=3). Das Problem ist natürlich, dass manche Hindernisse im Weg zu Orientierungslosigkeit führen. Eigentlich ist das ja so ne KI-Sache, ich hab aber irgendwie das Gefühl, dass man das auch mit wenigen Variablen und Abfragen lösen kann. Denke dabei an den alten Labyrinth-Trick, also "immer rechts abbiegen" in Verbindung mit dem Wissen ob ich mich rechts oder links bzw. oben oder unten vom meinem Ziel befinde. Hier mal ein Ausschnitt aus meinem Code: Code: [AUSKLAPPEN] If (zielx>x) And tilemap[(x+1),y]<>3 And x<14 And direction<>4 x:+1 direction=2 Else If (ziely>y) And tilemap[x,(y+1)]<>3 And y<14 And direction<>1 y:+1 direction=3 Else If (zielx<x) And tilemap[(x-1),y]<>3 And x>0 And direction<>2 x:-1 direction=4 Else If (ziely<y) And tilemapt[x,(y-1)]<>3 And y>0 And direction<>3 y:-1 direction=1 Else If (zielx=x) And tilemap[(x+1),y]<>3 And x<14 And direction<>4 x:+1 direction=2 Else If (ziely=y) And tilemap[x,(y+1)]<>3 And y<14 And direction<>1 y:+1 direction=3 End if Direction sollte eigentlich verhindern, dass der gleiche Weg wieder zurückgelaufen wird. Also 1 ist oben, 2 rechts, 3 unten, 4 links (im Uhrzeigersinn). Das Ganze funktioniert in manchen Fällen ganz gut. Wenn ich aber beispielsweise eine Mauer von oben nach unten ziehe und der Spieler von links nach rechts laufen soll, dann läuft meine Figuer (logischerweise) im Kreis. Sagen wir's so: Ich weiß warum's mit meinem Code noch nicht funktioniert. Aber wie geht's besser? Hat jemand ne Idee dafür, oder stell ich mir das ganze vielleicht auch zu einfach vor? Gruß Gochx |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dafür brauchst du eine Wegfinde Methode auf deiner Tilemap.
Gängige Methoden sind da A* (A-Star) oder Potential Fields. Für A* wirst du jedoch hier im Forum Implementationen im Code Archiv finden und es ist auch bedeutend einfacher zu verstehen, darum empfehle ich dir, dich damit auseinander zu setzen. (Potential Fields basieren auf Vektorfeld Theorie und ihre praktische Anwendung -> höhere Mathe) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In den BlitzMax-Samples ist auch ein AStar-Beispiel drin. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...hp?t=19214 | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
gochx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, genau das hab ich gesucht. bin zwar noch nicht ganz durchgestiegen, aber das Prinzip ist mir klar. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group