Pathfinding

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

  • Pathfinding

    Hallo Zusammen
    Ich arbeite gerade an einem Gegner, welcher sich ähnlich wie die Geister bei Pacman verhalten. Jedoch habe ich ein Problem, dass der gegner gar nie startet zugehen. Dabei habe ich mich an Youtube-Tutorials orierntiert wie Heartbeast und noch einen weiteren^^ Zuerst hatte ich das Problem, dass der Gegner nicht auf dem Weg war, sondern zur Hälfte mit dem körper noch in der Wand war. Dies versuchte ich zu beheben, jedoch bewegt dieser sich jetzt gar nicht mehr.

    GML-Quellcode

    1. ​grid=mp_grid_create(0,0,room_width/32,room_height/32,32,32);
    2. path=path_add();
    3. mp_grid_add_instances(path, obj_Block,true);
    4. mp_grid_path(grid,path,x,y,obj_Pacman.x,obj_Pacman.y,0)
    5. path_start(path,3,path_action_continue,false);
  • Der Spieler bewegt sich jetzt einwandfrei habe alle Auf Origin=0 gestellt. Jedoch ist es immer noch der Fall, dass die Path-finding-Gegner in die Blöcke hineingehen, während sie auf dem Weg sind, diese jedoch nicht durchquert.
  • Du kannst das collision grid auch drawen (lassen) entweder selbst in einer doppelten Vorschleife oder es gibt einne debug funktion?(bin mir nicht sicher) - das ist aber super um sich anzusehen ob alles funktioniert wie man es sich erhofft

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • habe ich gemacht. Man sieht dass er immer noch durch die roten markierte Felder zur Hälfte hineingeht.
    und diagoal habe ich ausgeschaltet, jedoch geht er nicht genau dem Grid nach, wieso? sonder macht manchmal so kurven und dabei geht er in die Wände rein
  • mein create event

    Quellcode

    1. global.grid = mp_grid_create(0, 0, room_width / 16, room_height /16, 16, 16)
    2. mp_grid_add_instances(global.grid, wall, 0);


    mein maus button event

    Quellcode

    1. path = path_add();
    2. randx=mouse_x
    3. randy=mouse_y
    4. mp_grid_path(global.grid, path, x, y, randx, randy, 1)
    5. path_set_kind(path, 1);
    6. path_set_precision(path, 8);
    7. path_start(path, 1, path_action_stop, 1);

    bei wall ist der sprite originauf center eingestellt also die mitte
    character ist auf center eingestellt also die mitte

    also code stammt von hier...
    und es hat damals funktioniert


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von CodeCrusher ()

  • ich verstehe nicht es wird immer noch abgekürzt

    GML-Quellcode

    1. /// Object rote FIgur
    2. ///Create Event
    3. path=path_add();
    4. ///Step
    5. mp_grid_path(global.grid, path, x, y, obj_Pacman.x, obj_Pacman.y, 1);
    6. path_set_kind(path, 0);
    7. path_start(path, 3, path_action_stop, 1);
    8. /// Object Grid
    9. /// Grid create
    10. var cell_width = 32;
    11. var cell_height = 32;
    12. var hcells = room_width div cell_width;
    13. var vcells = room_height div cell_height;
    14. global.grid=mp_grid_create(0,0,hcells,vcells,cell_width,cell_height);
    15. global.grid = mp_grid_create(0, 0, hcells,vcells,cell_width,cell_height)
    16. /// Add Instances
    17. mp_grid_add_instances(global.grid, obj_Block,1);
    Alles anzeigen


    Hier noch einen Ausschnitt, wie es gedrawt aussieht. Dabei sieht man auch, wie der rote Charakter in die roten Felder geht.

    Eigentlich sollte der Weg dazwischen nur ein Feld breit sein, jedoch bewegt sich der Gegner dann gar nicht erst.
    Bilder
    • ice_screenshot_20161010-193420.png

      4,04 kB, 260×299, 397 mal angesehen
  • so is es schwer zu lösen... hast diagonal ausgeschaltet?

    am besten du packst den ganzen projekt ordnen und lässt uns ein auge drauf werfen ^^

    obwohle jetzt sehe ich beim bild das du die wall objekte zentriert hast... stell die auf 0,0
    der begehbare pfad ist zu schmall