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

27.09.2009, 11:48

Pathfinding ohne Gitter

Hi
ich hab nachdem in dem Buch "C++ für Spieleprogrammierer" immer von nem RTS die Rede ist mich jetzt daran gemacht eins zu programmieren. Also Gebäude Panzer bauen und bewegen und schießn funktioniert schon. Das Problem ist halt das wenn ein Gebäude oder ein anderer Panzer oder sonst was im weg steht der Panzer einfach net weiterfährt.
Das Spiel ist eben so aufgebaut dass alle Panzer, Gebäude sich in std Listen befinden, unterschiedliche Größen haben und frei wählbare Positionen.
Hab mal bisschen im Internet gesucht und mir ein Tutorial über den A*-Algorithmus durchgelesen. Wie soll ich das jetzt machen?
[list]1) Ich geh einfach immer ein pixel und prüf dann ob der (z.B. 90x90) Panzer da Platz hat. Bei einer 2000x2000 Pixel großen karte, dauert das aber wahrscheinlich ewig
2) ich mach einfach abhängig von der panzer größe und position jedes mal wenn ich den wo hinschicke ein neues grid mit der größe des Panzers (z.B. 90x90) dann wären das zwar nur noch 22x22 Felder, aber der panzer würde wenns schlecht läuft nicht durch eine Öffnung von 170 Pixel kommen
3) Ich mach einfach ein Gitter mit z.B. 5 Pixel Größe, und mach das Gebäude immer nur in diesem Gitter gebaut werden können. Wären halt immer noch 400x400 Felder[/list]
Welcher dieser Wege würdet ihr gehen bzw. habt ihr einen besseren Weg für mich?

Soll ich außerdem vor jeder Pfadfindung eine array erstellen in der man sieht welcher Platz frei ist(Wegen Performance und so)?

Danke schonmal !

2

27.09.2009, 11:51

Klingt für mich eher wie eine Kollisionskontrolle, als Wegfindung.
fka tm

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

3

27.09.2009, 11:53

Stichwort: Steering Behaviours

Es gibt diverse quelloffene Bibliotheken dafür, das Stichwort sollte ich weiterbringen wenn du suchst.

4

27.09.2009, 12:31

Danke für das Stichwort!
Hab mich da jetzt noch net wirklich einglesen, aber da braucht man doch auch z.B. den A* algorithmus um den weg durch die Landschaft und so zu planen ?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

27.09.2009, 12:36

A* lauft nicht nur auf Gittern sondern allgemein auf Graphen, das Gitter wär nur n Spezialfall von einem Graphen wo alle Knoten gleichen Abstand voneinander haben und jeder 8 Nachbarn (außer am Rand halt)...
Du kannst den also auf jeden Fall auch z.B. auf einem "verzerten Gitter" (z.B. um dein Haus herum) laufen lassen...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

27.09.2009, 13:59

http://www.ai-blog.net/archives/000152.html
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

27.09.2009, 15:18

Zitat


A* lauft nicht nur auf Gittern sondern allgemein auf Graphen, das Gitter wär nur n Spezialfall von einem Graphen wo alle Knoten gleichen Abstand voneinander haben und jeder 8 Nachbarn (außer am Rand halt)...
Du kannst den also auf jeden Fall auch z.B. auf einem "verzerten Gitter" (z.B. um dein Haus herum) laufen lassen...

Wie läuft dass dann so ungefähr ab? muss ich jedes mal wenn ein Gebäude gebaut wird ein neues Gitter dynamisch erstellen?

Nox: Die Seite sagt ja man soll eine navigation mesh haben um den weg zu berechnen. Aber immer wenn irgendwo ein neues Hinderniss vom Spieler (wie eine Mauer) gebaut wird müsst ich die doch neu berechnen, oder meinst du dass ich das dann einfach mit dem "Separation Verhalten" der Steering Behaviours umgehen soll?

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

8

27.09.2009, 15:19

Zitat von »"Andy-freak"«


Wie läuft dass dann so ungefähr ab? muss ich jedes mal wenn ein Gebäude gebaut wird ein neues Gitter dynamisch erstellen?


... oder die wegkosten an der stelle erhöhen
"Don't trust your eyes: They are a hell of a lot smarter than you are"

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

27.09.2009, 15:26

Zitat von »"Andy-freak"«

Wie läuft dass dann so ungefähr ab? muss ich jedes mal wenn ein Gebäude gebaut wird ein neues Gitter dynamisch erstellen


Du musst doch ja nicht das komplette Gitter neu machen, du kannst doch auch das vorhandene verändern...

10

27.09.2009, 15:31

und wie groß würdet ihr so am Anfang den Abstand zwischen den Knoten machen? Also Kartengröße ca. 2000x2000

Werbeanzeige