Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.03.2017, 20:46

A* - Algorithmus auf isometrischer Karte

Hallo,

momentan habe ich eine isometrische verschiebbare Karte in Form eines Rasters erstellt.

Das vermutlich nicht so schwerwiegende Problem ist nun folgendes:

Bei einer Kachelgröße von 64x32 läuft der A* zwar, aber sehr eingeschränkt.

Ich dachte mir nun, dass ich das grid z.B. auf 8x4 - Basis erstelle und dann die grafische Karte exakt obendrüber lege, um eine "freiere" Bewegung der Einheiten zu erreichen.

Das ist mein Ansatz um das zu lösen.

Nun habe ich die Frage, wie kann man das eleganter oder besser umsetzten? Bei meinem Ansatz laufen ja im Prinzip zwei Karten parallel übereinander und das möchte ich vermeiden.

Gruß Javaist

2

26.03.2017, 21:14

Vielleicht solltest du einen anderen Ansatz finden. Flowfield pathfinding. Gerade weil du von Einheiten sprichst.

Flowfield kann zudem als collision avoiding Technik dienen bezüglich dass Einheiten sich aus dem weg gehen.

Es gibt techniquen wo du fowfield pathfinding dahin bekommt dass du ein riesen grid abdecken kannst ohne performance einbussungen.

Die Implementierung von flowfield pathfinsing ist nicht sonderlich schwer. Die Sektoren miteinander zu verinden ist aber sehr tricky.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

26.03.2017, 22:08

Was meinst du mit “läuft sehr eingeschränkt“?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

4

26.03.2017, 22:21

Bei Path Finding sind meist grosse zusammenhaengende Bereiche komplett begehbar (oder eben nicht) und eine kleine Kachelgroesse ist nur auf wenigen Feldern noetig. Ein sinnvoller Ansatz ist daher das so zu mischen, das die detailreichen Bereiche nur da sind, wo das auch wirklich noetig ist.

5

26.03.2017, 22:22

Er meint sicherlich performance. Hat er beim grössere leere Felder bei der suche so kommt es sicherlich bei ihm zu einbrüchen.
Aber auch so ist pathfinding eine sehr rechenintensive Operation.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

27.03.2017, 09:11

Er meint sicherlich performance. Hat er beim grössere leere Felder bei der suche so kommt es sicherlich bei ihm zu einbrüchen.
Aber auch so ist pathfinding eine sehr rechenintensive Operation.

Wenige große Kacheln bringen Performanceeinbußen und sein Ansatz sind viele kleine Kacheln? Ich denke hier geht es eher darum dass das Ergebnis nicht schön genug ist. Dafür kannst du deinen erhaltenen Pfad theoretisch smoothen und zusätzlich, wie TGGC schon schreibt davon ausgehen dass eine Kachel eine begehbare Fläche ist und nicht einfach ein Punkt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schorsch« (27.03.2017, 09:23)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

27.03.2017, 09:16

Ich muss das jetzt mal sagen: Das Wort heißt "Einbußen", nicht "Einbußungen" ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

28.03.2017, 08:07

Mit eingeschränkt meine ich die Form der Bewegung. Ausgehend vom Mittelpunkt laufen die Einheiten nur die acht Richtungen von Kachel zu Kachel und das sieht ehrlich gesagt sehr "plump" aus.

Natürlich ist mir klar, dass eine Pixelbewegung sehr performancelastig ist und genau deshalb lasse ich die A*-Bewegung Kachelabhängig generieren. Also ums nochmal auf den Punkt zu bringen ich berechne den Pfad als Kacheln nicht als einzelne Pixel und erst die tatsächliche Bewegung läuft dann Pixelabhängig.

Deshalb dachte ich mir die Kacheln des Grids zu verkleinern um eine "freiere" Bewegung zu erzielen.

9

28.03.2017, 09:52

Kannst dir ja mal valves Implementierung von AI bei left4dead angucken.

Aber im Grunde must du nur einen algo finden der dir curven berechnet. Da gibts einen der mir leider nicht einfällt gerade. Der achtet bei der Generierung darauf dass enge curven nicht verloren gehen.

Im Grunde kannst du aber auch die 8 Richtungsangaben physikalisch weiterverwerten. Sie sozusagen als velocity Richtung verwenden.

Oder du lerpst (linear interpolierst) einfach deine momentane Richtung der Einheit mit der des pathfinding.
Was mit einem flowfield pathfinding zum beispiel sehr gut geht. Bei normalem pathfinding. Muss man vielleicht eher in Richtung des in der Nähe befindlichsten Wegpunkt die einheit in die Richtung lerpen.

Bei normalem pathfinding wo man nur eine Strecke hat kann man auch die Positionen als Wegpunkte sehen. So wie bei valves Implementierung.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

10

28.03.2017, 17:49

Im Grunde gibts zwei moegliche Ansaetze um das 8 Richtungen Problem zu umgehen. Einmal kannst du mehr als nur 8 Nachbarn betrachten. Zum Beispiel kann man zusaetzlich ueberpruefen ob eine Bewegunbg nach z.B zwei Tiles nach Norden und 1 Tile nach Osten geht. So ergeben sich beliebig viele Richtungen, wenn man nur genug Faelle ueberpreuft. Zweite Moeglichkeit ist das man das nach der eigentlichen Suche macht. Hier wuerde man jetzt checken ob sich n Schritte auf dem Weg zu einem einzigen zusammenfassen lassen. Fasst man dann einen diagonalen und einen senkrechten Schritt zusammen, ergibt sich so auch eine weitere Richtung.

Werbeanzeige