PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pahtfindingüberlegungen...



lokipoki
21.02.2007, 18:21
Also ich bin grad drauf und dran ein Pathfinding, ala Shinig Force zu basteln.

Meine Überlegung:

Also ich wollte für jedes Feld auf der KS-Map eine Variable anlegen. Also meine KS - Map sollte 25*25 Felder gross sein und somit 625 Variablen belegen. Betritt man eine Map werden die Felder mit individuell, je nach map, 1en und 0en besetzt. 1 bedeutet dieses Feld darf und 0 nicht betreten werden. Z.b. ein Stein auf einer Map bekommt eine 0. NPC (10-100) und Heros (200-300) bekommen auch Zahlen. Dabei können auch Zustände wie wenig HP des NPCs 10, durch den Ausdruck 11 angegeben werden. So werden nicht nur Standtorte der NPCS/Heros sonder auch deren Zustände dargestellt. Dies besonders nützlich wenn ein NPC einen NPC heilen soll. Nun werden für die NPC (Enemies) 2 Pointer eingerichtet. Einmal einen Pointer der die Position des NPCs angibt und einer der die "Umgebung" abtastet. Nun wird der Weg zum Hero berechnet und per Algorithmus mit beiden Pointern berechnet...

Was haltet ihr von dieser Idee? Was sollte ich beachten? Ist sie noch ausbaufähig oder liege ich mit meiner Idee ganz am Prinzip des Pathfinding daneben?

Kaat
21.02.2007, 18:39
Die Grundüberlegung ist, soweit ich es verstehe und nachvollziehen kann, solide und richtig. Allerdings kann man stark optimieren. Zum Beispiel würde ich, statt für jedes Feld eine Variable anzulegen, die für Betreten/Nichtbetreten steht, einfach in der Database zwei Terrains anlegen, begehbar und nicht begehbar, mit denen ich die Tiles auf der Map ausstatte. Dann schickst du eben dein Abtaster-Event auf das jeweilige Feld vor, lässt per Variablen und Fork das Terrain ermitteln und weißt dann, ob das Feld begehbar ist oder nicht. Das spart dir zum Beispiel schon mal 624 Variablen. Wäre doch sinnvoller, oder?

*edit: Denkfehler von mir, Terrain ID ermitteln geht nur beim XP. Alternative für 2k hab' ich noch nicht gefunden, sorry.

lokipoki
21.02.2007, 18:52
Du hast natürlich recht. Aber ich habe leider keine Ahnung wie ich mit der TerrainID umgehen soll. Also das mit dem vergeben der beiden "Möglichkeiten" in der Database habe ich verstanden. Wie soll mein Pointer aber nun festellen welche ID gerade vorliegt?

Wenn ich nun aber die 625 Variablen benutzen, kann ich die von mir beschriebenen Zustände (NPC,Hero) festlegen. Ausserdem verstehen ich nicht warum man immer Variablen sparen sollte. Man kann doch fast so viele (per RHack) benutzen wie ma will. Trotzdem danke ich dir für deine Antwort.

Fällt dir aber auf anhieb noch eine komplexe Lösung, also mit vielen Berücksichtigungen wie, dass der NPC weisst wo/ob er nun andere NPCs z.B. heilen kann, die ich umsetzen könnte, ein?

Grandy
21.02.2007, 19:01
Denkfehler von mir, Terrain ID ermitteln geht nur beim XP. Alternative für 2k hab' ich noch nicht gefunden, sorry.

Der Befehl bei rm2k heißt "Set Terrain ID" <- doof übersetzt. Darüber hinaus kann man auch die ID eines Events auslesen und auf diese Weise ermitteln, ob Events blockieren.
Bei beiden Befehlen kannst du Variablen für X und Y Position eingeben, die du wiederum aus der Position der Charas ableiten kannst.

Kaat
21.02.2007, 19:51
Variablen sparen würde ich aus dem Grund, weil es einfach Berechnungen erspart und damit auch Performance. Beim 2k ist das vielleicht noch nicht so wichtig, aber spätestens beim XP sollte man dann mit solchen Überlegungen im Hinterkopf arbeiten. Nicht zu vergessen, dass man bei weniger Variablen auch weniger durcheinander kommt. Schließlich werden Fehler in den Scripten, gerade in Kampfsystemen, vom Scripter verursacht. ;)

Dein Problem ist höchst interessant. Da muss es doch noch einfachere Lösungen geben. Hmmm.... wie wäre es, statt jedes Feld abzuspeichern und zu verwerten, stattdessen die Events (Gegner, NPCs, Heros) mit eigenen Variablen abzuspeichern? In vier Stellen der Variable werden die Koordinaten gespeichert, in die restlichen 5 kann man beliebige andere Werte eintragen. Das lohnt sich auch noch, sofern man weniger als 624 Events für so eine Map will.


Der Befehl bei rm2k heißt "Set Terrain ID" <- doof übersetzt.
Ach so, ich dachte, der würde dem aktuellen Feld ein neues Terrain verpassen. Hm.

CapSeb
23.02.2007, 17:18
Nun wird der Weg zum Hero berechnet und per Algorithmus mit beiden Pointern berechnet...
was? Sieht irgendiwie nach Tippfehler aus. Auf jeden Fall verstehe ich so nicht, was du damit meinst.

So. Da du eine KS-Map benutzt, brauchst du die Terrain-ID auch nicht für was anderes. Würde sie dir also nahe legen, da ich sie schon selbst erfolgreich ausgenutzt habe. Aber damit kannst du nicht den Status oder die Position von Personen/Chars bestimmen. Die müsste man gesondert betrachten.

Aber wie geht Pathfinding eigentlich? Jedes Strategiespiel hat das ja...


http://www.multimediaxis.de/images/smilies/old/s_017.gif CapSeb http://www.multimediaxis.de/images/smilies/old/s_065.gif

Nathrael
23.02.2007, 17:50
Hmmm...in Inelukis Keypatch-Demo ist ein Pathfinding-Script enthalten, welche man problemlos auch umbauen kann, sodass sie ohne Keypatch funzt...

Ryo Saeba 1000
23.02.2007, 19:00
@CapSeb:
Es gibt viele Pathfindingalgorithmen. Einer der besten (und meistgenutzten) ist der A* Algorithmus. Dieser würde sich auch sehr gut in einem Strategie-KS ala Shining Force machen.
Ich hab mal eine Übersetzung zu einem englischen Tutorial darüber im Quartier geschrieben:

http://forum.rpg2000.4players.de/viewtopic.php?t=59760&postdays=0&postorder=asc&highlight=fachsimpelt&start=30
(3. Post von unten)

Lachsen hatte dann die Methode nach diesem Tutorial im RPG Maker 2000 umgesetzt:
http://velsarbor.rpg-atelier.net/neu_Path-Finding.rar