.
|
|
| Autor | Beitrag |
|---|---|
|
000 28.08.2001, 19:53 Prefect |
Kleines Wort, große Auswirkung... und ein äußerst interessantes Kapitel nicht nur in der Spieleprogrammierung. Gehen wir von folgendem Szenario aus: Auf der Map gibt es verschiedene Felder, z.B. Außerdem stehen noch Gebäude rum, Mauern etc.. die potentiell zerstört werden können. Wie würdet ihr einen Pathfinding-Algorithmus hier ansetzen? cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
001 28.08.2001, 20:35 Prefect |
Nachdem ich nun von DP im Chat folgende Zeile bekommen habe: <darthpaul> Prefect der nachteil ist wenn man alles weiss dass keiner einem helfen kann :| Ich erwarte hier keine überintelligente, nobelpreisgewinnende Hilfe von irgendjemandem. Um genau zu sein, ich stehe im Moment nicht wirklich vor diesem Problem. Ich würde nur gern wissen, was ihr von Pathfinding wißt, wie ihr damit zusammengestoßen seid, und wie ihr so ein Problem angehen würdet (wenns sein muß). Außerdem weiß ich nicht alles. Wie oft muß ich das noch sagen? :/ cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
002 28.08.2001, 22:00 Mazze |
Naja....aber fast! Auf jeden Fall habe ich mich mit einem Pathfinding-Alogorithmus noch überhaupt nicht auseinandergesetzt und ich bin auch noch nicht so der Held in C++ aber ich schreib mal trotzdem was. BattleTech-MOD: |
|
Profil || Suche |
|
003 28.08.2001, 23:04 Killing Me Softly |
Ich würde die ganze Sache klassisch angehen.
Wir starten bei dem roten Feld (ok - ist nicht wirklich rot *g*) und wollen zu dem Blauen. Dummerweise steht zwischen Start und Ziel ein Hinderniss (Gebierge, Wand, was weiss ich). Nun werden sämmtliche Felder markiert, die von dem Zielpunkt direkt erreichbar sind. Die Markierung erfolgt mittels eines Zählers.
Das wird für die markierten Felder solange wiederholt, bis der Startpunkt erreicht ist.
Nun müssen wir nur den Markierungen folgen, also von dem Feld '8' auf eines mit '7' - '6' u.s.w.
Das Sumpf-Problem (man kommt zwar durch, aber nicht so schnell) und das Problem der zerstörbare Hindernisse sollte eigentlich auch relativ einfach lösbar sein. --Der Horizont vieler Menschen ist ein Kreis mit Radius Null - und das nennen sie ihren Standpunkt. |
|
Profil || Suche |
|
004 29.08.2001, 10:14 Keyo |
Gar nicht dumm...wirklich nicht. ---- |
|
Profil || Suche |
|
005 29.08.2001, 17:02 Another1 |
du musst aber noch beachten das verschiedene Bodenfelder verschiedene "qualitäten" haben die ja auch auswirkungen auf die geschwindigkeit haben, also sollte bei der entscheidung noch ein gewisser "qualitätsfaktor" den weg entscheidend beeinflussen ... ui das hast du ja erwähnt *fg* --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
006 29.08.2001, 17:31 Retro |
Hmm ist ja nett! :) Was bedeutet in dem Zusammenhang eigentlich "Pattern"? --shielding people from their own stupidity is an evolutionary step backwards anyway. /* God is dead!............Nietzsche */ |
|
Profil || Suche |
|
007 29.08.2001, 17:52 dp Administrator |
um "wie wärs mit 100000x100000 Feldern AOE-Maps?" wäre das nicht _etwas_ langsam mit obiger methode? -- |
|
Profil || Suche |
|
008 29.08.2001, 19:36 TheTinySteini |
Nein, ich denke nicht, dass das langsam wäre. Denn, wenn man das Teil wirklich realistisch machen will, dann sollte man sowieso nur wenige Schritte im Voraus abklären. Denn im Nebel des Krieges und so sollen ja die Computergegner auch Probleme haben. TheTinySteini |
|
Profil || Suche |
|
009 29.08.2001, 20:15 Prefect |
Killing Me Softly's Methode ist in der Tat klassisch, und heißt übrigens Dijkstra's Algorithmus :) Natürlich hat diese Methode auch ihre Probleme, wie dp ja gesagt hat. Sie wird verdammt langsam. Das führt zur Entwicklung von Algorithmen wie A* (A star). Wenn man sich die untersuchten Felder bei Dijkstra anschaut, sieht man, dass der Computer kreisförmig alle Felder um den Startpunkt herum untersucht. Bei A* dagegen untersucht der Computer bevorzugt Felder, die in die richtige generelle Richtung gehen. Wenn gar kein Hindernis vorhanden ist, untersucht der Computer nur die direkte "Vogelflug"-Linie zwischen Start- und Endpunkt. Einiges besser, stimmts? Leider immer noch nicht gut genug. Eine Option, die ich mir überlegt habe, wäre ein doppelter A*, d.h. man beginnt die Suche gleichzeitig vom End- als auch vom Startpunkt. Dadurch könnte man die Anzahl der untersuchten Felder herunterbringen. Aber auch das ist nicht "scalable" genug. Tatsächlich wäre es eine gute Idee, häufig benötigte Wege zu cachen. Allerdings hat das einige Schwächen, da die Einheitenbewegung dadurch evtl. ins lächerliche gezogen wird - die Einheit bewegt sich erst nach rechts, erreicht dann den Startpunkt des gespeicherten Weges und geht dann wieder nach links - das ist zwar jetzt überzogen, aber in der Art durchaus denkbar. Ach ja: Wenn man mit A* arbeitet, ist Nebel des Krieges eigentlich leicht einzubauen: Man beschreitet beim Pathfinding einfach keine Felder, die im unerkundeten Bereich liegen... der Algorithmus stoppt dann an dem Punkt, an dem die Länge des bekannten Weges + die Länge der Vogelfluglinie kleiner ist als alle bekannten Wege. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
010 30.08.2001, 19:01 dp Administrator |
hm wie wäres es, wenn man die map einfach in 'leaves' unterteilt und dann die klassischen hl-vis-berechnungen im 2dimensionalen raum durchführt =) aber mal was anderes was ist ein rts ohne folgendes problem: zwei sammler treffen sich auf einer brücke ... *G* d.h. man müsste ja die pathfind berechnung des öfteren durchführen, wenn sich irgendetwas ändern z.b. durch einen einheitenpulk oder durch deformiertes gelände dass dazu führt dass der weg 'teurer' wird .. ? -- |
|
Profil || Suche |
|
011 31.08.2001, 16:38 Psychodad |
Was wäre, wenn man von Anfang an allen Feldern der Karte eine Zahl zuordnen würde. Normales Terrain ne 1. |
|
Profil || Suche |
|
012 31.08.2001, 17:21 Another1 |
mhh, da isses doch schon besser nen typischen A* algorithm oder so zu nehmen, prefect hatte auch schon gesagt das es ganz einfach wäre in dem Beispiel von KMS einfach boden "qualitäten" und höhenunterschiede einfliessen zu lassen, indem man die zahl im nächsten kästchen eben noch von Steigung und Bodenqualität etc abhängig macht (je größer desto "schlechter") --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
013 31.08.2001, 19:42 TheTinySteini |
Hm, hier gäb's was nettes über A*: ... aber die Seite ist euch höchstwahrscheinlich bekannt (zumindest Prefect). --TheTinySteini |
|
Profil || Suche |
|
014 31.08.2001, 21:27 Prefect |
Psychodad, nur allein von Höhenunterschieden kannst du kein Pathfinding machen. Sieh dir z.B. C&C2 an, da gibts gar keine Höhenunterschiede. Das Pathfinding bei C&C2 ist übrigens kein Pathfinding sondern einfach ein Drauflosmarschieren. Wenn dan (oh Wunder!) ein Hindernis kommt, versuchen die Einheit, einen Weg an dem Hindernis entlang zu "tasten". Darthpaul, so eine BSP-Unterteilung hab ich mir auch schon überlegt, aber ich denke doch, dass eine typische RTS-Map besser durch Tiles dargestellt wird... Ach ja, und man macht die Brücke einfach breiter ;) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
015 01.09.2001, 00:30 Psychodad |
Ja, ich heute auch noch mal Zeit drüber nachzudenken! Ich denke meine Idee wäre auch fast eher so ein drauflosmarschieren. Der Weg muss wirklich schon komplett vorberechnet sein, bevor die Einheit losläuft. |
|
Profil || Suche |
|
016 01.09.2001, 01:22 Masterstroke |
Ich glaube bei gamasutra gab's mal ein Feature über Path-Finding... *such* ahja, hier: http://www.gamasutra.com/features/19990212/sm_01.htm Sollte man sich wirklich mal durchlesen, meiner Meinung nach sehr interessant, das Ende könnte vielleicht auch Prefect hilfreich sein, schau halt mal rein...=) --Masterstroke |
|
Profil || Suche |
|
017 01.09.2001, 19:30 Prefect |
... kenn ich schon ;) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
018 03.09.2001, 14:19 Polymorph |
-- ----------------------------------------
|
|
Profil || Suche |
|
019 06.09.2001, 22:40 Prefect |
Hmm.. ich mußte in den letzten Tagen feststellen, daß auch die Kollision selbst schon eine nette Herausforderung sein kann. Kryos verwendet eine Mischung aus Tile-basierter Kollision und 100%ig feiner Auflösung der Koordinaten von Einheiten. Die TraceLine-Funktion für Kollisionen, die noch nicht mal auf Kollisionen mit anderen Einheiten prüft ist bereits 250 Zeilen lang :) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
020 07.09.2001, 16:32 Another1 |
ja Kollisionsabfrage zu coden is echt nen hartes stück arbeit :D Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
021 07.09.2001, 17:38 gerk |
nun ich klasischen qb-zeiten hab ich das so gemacht: is sicher nict die beste methode, aber ich war erst 13 --„Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
022 07.09.2001, 19:00 TheTinySteini |
Hm, tile-based Collision? Also etwa so: wenn in einem Tile 2+ Einheiten stehen, dann soll er Kollisionsabfrage machen, ja? TheTinySteini |
|
Profil || Suche |
|
023 07.09.2001, 19:20 gerk |
mhhh.. kannst du das mnal auf deutsch übersetzen? „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
024 07.09.2001, 19:46 Prefect |
Ja, die Abfrage erfolgt komplett mit Bounding Boxes. Aber gerade dadurch, dass die Einheit, die sich bewegt eine Größe hat (und nicht einfach ein Punkt ist), wird das ganze ja komplizierter... cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|





