Wegfindung

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

  • Hi Leute,
    Hab mal ein älteres Projekt ausgegraben, wo ich damals an der Wegfindung gescheitert bin.
    Die Wegfindung habe ich nun hinbekommen(bis auf ein paar Probleme).

    1. Ki läuft quer trotz allowdiag = false

    2. Jede Ki soll zu einem anderen block gehen

    Spoiler anzeigen

    GML-Quellcode

    1. path_speed = 1
    2. nemine_id = -1; // dieser Wert gibt die id wieder
    3. nemine = 10000; // nähestes zu minen des
    4. for (i=0; i<instance_count; i+=1) // Schleife zum überprüfen aller Instancen im Raum
    5. {
    6. iii = instance_find(solid,i) ;
    7. if iii.mine = 1 && iii.allf = 1 && iii.found = 0
    8. {
    9. if (distance_to_object(iii)< nemine) // abfrage ob der gefundene Hp wert kleiner als der kleinste bekannte wert ist
    10. {nemine_id = iii; nemine = distance_to_object(iii);} // falls ja, wird der Wert gespeichert und auch die ID
    11. }
    12. }
    13. netomine = nemine_id // gewünschter Wert
    14. if !mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y,false)
    15. && !mp_grid_path(grid,path,x,y,netomine.x+48,netomine.y,false)
    16. && !mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    17. && !mp_grid_path(grid,path,x,y,netomine.x,netomine.y+48,false)
    18. && !mp_grid_path(grid,path,x,y,netomine.x+48,netomine.y+48,false)
    19. && !mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y+48,false)
    20. && !mp_grid_path(grid,path,x,y,netomine.x+48,netomine.y-48,false)
    21. && !mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y-48,false)
    22. {
    23. place = 0
    24. }
    25. else
    26. {
    27. place = 1
    28. }
    29. if netomine != -1 && place = 1
    30. {
    31. if netomine.lf = 1 && netomine.rf = 0 && netomine.tf = 0 && netomine.df = 0
    32. && mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y,false)
    33. {
    34. mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y,false)
    35. path_start(path,1,0,0)
    36. }
    37. if netomine.rf = 1 && netomine.tf = 0 && netomine.df = 0 && netomine.lf = 0
    38. && mp_grid_path(grid,path,x,y,netomine.x+48,netomine.y,false)
    39. {
    40. mp_grid_path(grid,path,x,y,netomine.x+48,netomine.y,false)
    41. path_start(path,1,0,0)
    42. }
    43. if netomine.tf = 1 && netomine.df = 0 && netomine.lf = 0 && netomine.rf = 0
    44. {
    45. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    46. path_start(path,1,0,0)
    47. }
    48. if netomine.df = 1 && netomine.lf = 0 && netomine.rf = 0 && netomine.tf = 0
    49. {
    50. mp_grid_path(grid,path,x,y,netomine.x,netomine.y+48,false)
    51. path_start(path,1,0,0)
    52. }
    53. ////
    54. if netomine.df = 1 && netomine.lf = 1 && netomine.rf = 1 && netomine.tf = 1
    55. {
    56. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    57. path_start(path,1,0,0)
    58. }
    59. ////
    60. if netomine.df = 1 && netomine.lf = 1 && netomine.rf = 1 && netomine.tf = 0
    61. {
    62. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    63. path_start(path,1,0,0)
    64. }
    65. if netomine.df = 1 && netomine.lf = 1 && netomine.rf = 0 && netomine.tf = 1
    66. {
    67. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    68. path_start(path,1,0,0)
    69. }
    70. if netomine.df = 0 && netomine.lf = 1 && netomine.rf = 1 && netomine.tf = 1
    71. {
    72. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    73. path_start(path,1,0,0)
    74. }
    75. if netomine.df = 1 && netomine.lf = 0 && netomine.rf = 1 && netomine.tf = 1
    76. {
    77. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    78. path_start(path,1,0,0)
    79. }
    80. ////
    81. if netomine.df = 1 && netomine.lf = 1 && netomine.rf = 0 && netomine.tf = 0
    82. {
    83. mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y,false)
    84. path_start(path,1,0,0)
    85. }
    86. if netomine.df = 0 && netomine.lf = 0 && netomine.rf = 1 && netomine.tf = 1
    87. {
    88. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    89. path_start(path,1,0,0)
    90. }
    91. if netomine.df = 0 && netomine.lf = 1 && netomine.rf = 0 && netomine.tf = 1
    92. {
    93. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    94. path_start(path,1,0,0)
    95. }
    96. if netomine.df = 1 && netomine.lf = 0 && netomine.rf = 1 && netomine.tf = 0
    97. {
    98. mp_grid_path(grid,path,x,y,netomine.x+48,netomine.y,false)
    99. path_start(path,1,0,0)
    100. }
    101. if netomine.df = 1 && netomine.lf = 0 && netomine.rf = 0 && netomine.tf = 1
    102. {
    103. mp_grid_path(grid,path,x,y,netomine.x,netomine.y-48,false)
    104. path_start(path,1,0,0)
    105. }
    106. if netomine.df = 0 && netomine.lf = 1 && netomine.rf = 1 && netomine.tf = 0
    107. {
    108. mp_grid_path(grid,path,x,y,netomine.x-48,netomine.y,false)
    109. path_start(path,1,0,0)
    110. }
    111. }
    112. else
    113. {
    114. path_end()
    115. }
    Alles anzeigen


    Video zur Veranschaulichung:


    Ich hoffe jeder versteht mein problem!
    danke im voraus! :thumbup:
    Wenn Frodo ein Hobbit ist,sind 8 Frodos dann ein Hobbyte? ?(
  • Hmm,

    schwer zu sagen warum er dennoch diagonal läuft,... aber wirklich 45 Grad sind das ja nie,... eher was zwischen 0 - 40 ,... ich weis nicht ob das die Funktion zulässt um einen Weg zu finden,.... du könntest mal folgendes versuchen

    Verkleinere das Grid,... somit hat er mehr möglichkeiten einen passenden Weg zu finden.

    Alternative lösung wäre ein A-Star Algrotihmus,... davon gibts paar kostenlose im i-net die sich relativ leicht umsetzen lassen --> vorsicht, hohe Rechenauslastung.

    Ansonsten,... du hast sonst nirgends mehr die Funktion verwendet?

    Grüßle Blayde
  • die wegfindung funktioniert nur schaffe ich es nicht den code so zu erweitern das wenn nur ein block ausgewählt ist nur eine AI dort hinläuft b.z. bei einem zweitem ausgewählten block eine zweite AI zu dem zweiten block läuft

    trotzdem danke schon mal für die erste frage ist ja auch nicht so tragisch das die AI quer läuft.
    Wenn Frodo ein Hobbit ist,sind 8 Frodos dann ein Hobbyte? ?(
  • Wie wäre es denn wenn du eine Liste erstellst,... und dort die Koordinaten bzw die Objekt ID speicherst welche die Koorinaten enthält,... anschließend sucht sich jede AI den kürzesten Weg aus und löscht diese ID aus der Liste, damit sie die einzigste ist die dort hinläuft,....

    So in etwa würde ich das umsetzen