Bewegung Pfad mit Abstand mp_grid

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

  • Bewegung Pfad mit Abstand mp_grid

    Hallo Leute.

    Ich spiele gerade ein wenig mit dem mp_grid herum und versuche mehrere Character zu bewegen. Es geht um ein einfaches Strategiespiel (top/down) Nach auswahl verschiedener Eineheiten und einen Rechtsklick sollten sie sich bewegen. Dazu habe ich mal ein mp_grid erstellt, welches mir mithilfe von mp_grid_path einen Pfad erstellt um diese zu bewegen. Jetzt ist es halt so wenn alle Einheiten bewegt werden, dann sind diese alle auf den Punkt (mouse_x,mouse_y). So will ich das aber nicht.

    Dazu habe ich 2 scripts geschrieben, die mir alle Einheiten durchcheckt und nachschaut ob die Position frei ist. Wenn ja, dann kann ich mich ohne Probleme dorthin bewegen. Wenn nicht, dann wird der script rekursiv aufgerufen, bis ein Punkt frei wird. Das sieht dann in etwa so aus:

    GML-Quellcode

    1. ​var xx, yy;
    2. xx = argument0;
    3. yy = argument1;
    4. with(obj_char) {
    5. if(path_exists(move_path)) {
    6. length = path_get_length(move_path);
    7. path_x = path_get_x(move_path, length);
    8. path_y = path_get_y(move_path, length);
    9. distance = point_distance(xx,yy,path_x,path_y);
    10. if(distance < 16) {
    11. xx = get_free_position_x(xx-16,yy-16);
    12. }
    13. }
    14. }
    15. return xx;
    Alles anzeigen

    Diesen Script gibt es auch für y und der Aufruf funktioniert dann so:

    GML-Quellcode

    1. ​if(selected) {
    2. if(mouse_check_button_pressed(mb_right)) {
    3. if(path_exists(move_path)) {
    4. path_end();
    5. path_delete(move_path);
    6. }
    7. move_path = path_add();
    8. mp_grid_path(global.mp_grid,move_path,x,y,get_free_position_x(mouse_x,mouse_y), get_free_position_y(mouse_x,mouse_y),true);
    9. path_start(move_path,move_speed,0,false);
    10. }
    11. }
    Alles anzeigen


    Ich habe das dann auch mit 40 Einheiten probiert. Es funktioniert zwar, aber alle werden eben diagonal nach links oben gereiht aufgestellt (Was ja klar ist, weil im Script das rekursiv nach links oben geht). Mein PRoblem ist aber, dass es mit dem jetztigen script schon etwas ruckelt bei einer größerer Auswahl. Und da ich das Rad nicht neu erfinden will (:D) wollte ich mal fragen, ob von euch jemand so ein Problem schonmal hatte, oder wie er das am Besten (ruckelfrei, wenn geht) gelöst hat. Oder hätte jemand eine Idee wie ich das besser lösen könnte?


    Sorry für die schlechte Beschreibung. Auf rechtschreib/grammatikfehler habe ich nicht so geachtet. :D Bin zu müde dafür, ich will dieses Problem aber heute noch unbedingt lösen :thumbsup:

    Ich hoffe ihr habt es verstanden, aber anbei noch einen Screen wie es derzeit aussieht. (Die roten Linien zeigen den Pfad)



    LG und danke
    Rodrog
    Bilder
    • Unbenannt.png

      75,21 kB, 1.920×1.080, 97 mal angesehen
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Zwar frage ich ungern nach, aber hat von euch vielleicht jemand eine Idee? :D Ich habe zwar noch andere Lösungswege gefunden, aber keiner ist so wirklich perfekt. Vielleicht gehe ich das Problem einfach nur falsch an.

    LG
    Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Sehr gute Idee eigentlich. Somit kann ich ein wenig den FPS einbruch verhindern. Aber prinzipiell gehts mir nicht darum, dass die FPS einbricht, sondern die Position zu berechnen, die ich mit jeder Einheit ansteuer.

    Die Unterschiedliche Berechnung behalte ich mir aber im Hinterkopf.

    LG
    Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.