Bot pathfinding

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bot pathfinding

    Hi, da bin ich mal wieder^^

    Ich hab ein problem,

    ich hab eine map (sicht von oben) in dieser map sind weg-rechtecke, die mit anderen weg-rechtecke verbunden sind (verbunden = ds_list_create() <- dort stecken die ids der verbundenen rechtecke)

    So, der Bot sucht sich nun ein ziel rechteck aus und soll sich dann von den jetzigen weg-rechteck bis zum Ziel fortbewegen.

    Also von ein rechteck zum anderen, bis er endlich am ziel ist, dabei soll er auch eine kleine abweichung haben (also nicht immer den directen weg nehmen).

    Meine Frage ist nun: Wie mache ich das? XD
    Momentan hab ich es so, das der Bot nachschaut welche partner der weg_rechteck hat auf dem der Bot gerade steht und die besten zwei zur auswahl nimmt die näher am Ziel-rechteck sind. Dann werden die nurnoch die zwei per random ausgesucht und dann wird dort hingelaufen. Leider ist dies dumm, da er sich öfters in einer sackgasse begiebt, er sollte daher schon vorraus den weg kennen und den entlang gehen.

    Eine kleines Bild wie die fortbewegung sein soll hab ich auch noch angefertigt, und die aktuelle gm6 steht auch im anhang.
    Kleine anmerkung: Die Idee hab ich von den Zbots // CSSBots Navigation.



    Kleiner ausschnit aus aktuellen code:

    GML-Quellcode

    1. best_next = ds_map_find_first(way_next)
    2. if best_next = way_colli
    3. best_next = ds_map_find_next(way_next,best_next)
    4. if random(2) = 1
    5. {
    6. way_nextid = ds_map_find_value(way_next,best_next)
    7. }
    8. else
    9. {
    10. way_nextid = ds_map_find_value(way_next,ds_map_find_next(way_next,best_next))
    11. if way_nextid = way_colli
    12. way_nextid = ds_map_find_next(way_next,way_nextid)
    13. }
    Alles anzeigen


    way_next: eine ds_map wo "distance zum Ziel-rechteck" der key ist und value = id des weg_rechteckes

    way_nextid: dort wird der id gespeichert zu welchen rechteck er sich jetzt bewegen soll
    way_colli: Das rechteck wo der Bot gerade steht

    -----------------

    Man siehe da, der code ist totale scheiße^^.
    Daher soll erst ein path entstehen dann den ablaufen, am besten wers wenn man die ids der rechtecke die man entlangläuft
    in einer ds_list abspeichert, aber wie man den path richtig erstellt hab ich keine ahnung^^.

    so ich glaub das wars erstmal was ich zu sagen hab^^


    Achja noch kleine Steuerung erklärung:

    F2: way file speichern
    F3: way file laden (ich hab schon eine drin die könnt ihr zum testen benutzen)
    Linke Maustaste: ein rechteck erstellen
    Rechte Maus: wieder löschen^^

    Q: ein rechteck selektieren
    W: eine Verbindung machen zwischen den selektierten und den rechteck wo die maus gerade ist

    E: Ein dummen Bot erstellen!!!


    Ich hoffe ihr habt meine frage verstanden -.-

    Edit:

    zum bild:

    der der Bot soll so ähnlich ein path erstellen!
    Auf mein Bild sind 2 Pathe zu sehen, also natürlich soll nur 1 genommen werden, aber der bot soll ebend nicht immer den "besten" weg nehmen, sondern auch mal kleinen umweg gehen.

    Edit:
    Bugfixes am text XD
    Bilder
    • pathfinding.jpg

      27,42 kB, 642×477, 390 mal angesehen
    Dateien
    • buggi.rar

      (6,56 kB, 222 mal heruntergeladen, zuletzt: )
    *gähn*

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von The_Shadow3 ()

  • @ghostrider:

    Du musst erst rechtecke mit verbindungen erstellen, dann kannst den bot drauf setzen^^

    @Nobody-86

    mhh ist xgoel und ygoal jetzt der punkt wohin gerade der bot sich bewegt, oder ist xgoal & ygoal das entgülltige Ziel wo man rechtsklick gedrückt hat?

    Weil, dann verstehe ich den ganzen code nicht der zwischen
    "//Pathfinding" und den abschnitt von "path_start", was machen die ganzen for´s?
    ausserdem wüsste ich nicht wie ich es bei mir umsetzten könnte ?(
    *gähn*
  • Vielleicht hilft das nicht wirklich, aber in der offiziellen REGdemo 6.1 von gamemaker.nl ist auch ein Beispiel enthalten wie man das eingebaute Pathfinding einsetzt. Dort bewegt sich das Objekt auch einfach von Quadrat zu Quadrat, müsste also Aufschlussreich sein - obwohl ich persönlich es auch nicht ganz durchblickt habe. Wenn ich etwa will, dass das Pathfinding auf einem 16 Pixel-Grid arbeitet ist schon alles im Eimer - wirklich helfen kann ich persönlich somit nicht ^^"