Gibt es einen kürzeren weg

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

  • Gibt es einen kürzeren weg

    Ich habe einen ziemlich langen code gemacht für die KI in meinem spiel.
    Dieser macht es möglich dass der bot auf den nähesten gegner zielt. Ich bin
    ziemlich sicher das es einen kürzeren weg gibt
    Es gibt mehrere und verschiedene gegner objekte.

    Ich habe folgendes im step-event vom bot:

    GML-Quellcode

    1. //Move_??? = 1 wenn der bot das object ??? "sehen" kann
    2. if Move_Marine2 = 1
    3. && Move_Marine3 = 1
    4. && Move_Marine4 = 1
    5. && distance_to_object(Marine2) < distance_to_object(Marine3)
    6. && distance_to_object(Marine2) < distance_to_object(Marine4) {
    7. move_towards_point(Marine2.x,Marine2.y,0) ;
    8. }
    9. if Move_Marine2 = 1
    10. && Move_Marine3 = 0
    11. && Move_Marine4 = 1
    12. && distance_to_object(Marine2) < distance_to_object(Marine4) {
    13. move_towards_point(Marine2.x,Marine2.y,0) ;
    14. }
    15. if Move_Marine2 = 1
    16. && Move_Marine3 = 1
    17. && Move_Marine4 = 0
    18. && distance_to_object(Marine2) < distance_to_object(Marine3) {
    19. move_towards_point(Marine2.x,Marine2.y,0) ;
    20. }
    21. if Move_Marine2 = 1
    22. && Move_Marine3 = 0
    23. && Move_Marine4 = 0 {
    24. move_towards_point(Marine2.x,Marine2.y,0) ;
    25. }
    Alles anzeigen


    und das geht so für die anderen gegner weiter.
    MEINE FRAGE: Gibt es einen kürzeren weg? Wenn ja welchen?

    © 2008 by Teamgrill Productions

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Soul Reaver ()

  • Probier mal ob das so geht, habs nicht getestet
    Du musst allerdings Move_Marine2, Move_Marine3 usw. mit Move_Marine[0], Move_Marine[1] usw. ersetzen:

    GML-Quellcode

    1. var i, m, m_obj, bot, n;
    2. bot[0] = Marine2;
    3. bot[1] = Marine3;
    4. bot[2] = Marine4;
    5. n = 3;
    6. m = -1;
    7. for (i=0; i<n; i+=1) {
    8. d = distance_to_object(bot[i]);
    9. if (Move_Marine[i] = 1 and (m = -1 or d < m)) {
    10. m = d;
    11. m_obj = bot[i];
    12. }
    13. }
    14. move_towards_point(m_obj.x,m_obj.y,0) ;
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • unknown variable "m_obj"

    Keine ahnung warum das passiert aber ich hab alles so gemacht wie du es gesagt hast

    EDIT: Ich glaub ich weiß was falsch ist. Es gehört nämlich das move_towards_point() noch in die klammer

    © 2008 by Teamgrill Productions

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

  • der fehler kommt wenn keine Move_Marine Variable 1 ist, also einfach noch ne Abfrage hinzu und das passt:

    GML-Quellcode

    1. var i, m, m_obj, bot, n;
    2. bot[0] = Marine2;
    3. bot[1] = Marine3;
    4. bot[2] = Marine4;
    5. n = 3;
    6. m = -1;
    7. for (i=0; i<n; i+=1) {
    8. d = distance_to_object(bot[i]);
    9. if (Move_Marine[i] = 1 and (m = -1 or d < m)) {
    10. m = d;
    11. m_obj = bot[i];
    12. }
    13. }
    14. if (m != -1) {
    15. move_towards_point(m_obj.x,m_obj.y,0);
    16. }
    Alles anzeigen
  • aber es geht doch auch wenn ich das mache:

    GML-Quellcode

    1. var i, m, m_obj, bot, n;
    2. bot[0] = Marine2;
    3. bot[1] = Marine3;
    4. bot[2] = Marine4;
    5. n = 3;
    6. m = -1;
    7. for (i=0; i<n; i+=1) {
    8. d = distance_to_object(bot[i]);
    9. if (Move_Marine[i] = 1 and (m = -1 or d < m)) {
    10. m = d;
    11. m_obj = bot[i];
    12. move_towards_point(m_obj.x,m_obj.y,0) ;
    13. }
    14. }
    Alles anzeigen

    © 2008 by Teamgrill Productions
  • Völlig falscher Denkansatz. Genau aus dem Grund gibt es Parent Objekte. Wenn du in einem Spiel 200 Gegner hast, willst du die alle Manuell ausprogrammieren? Viel spaß. Mit Parents geht das wesentlich einfacher. Du machst einfache in Object OBJ_Enemy_Parent, das weißt du jedem Gegnertypus zu. Mit

    GML-Quellcode

    1. instance_nearest(x,y,obj)


    also in diesem Fall

    GML-Quellcode

    1. instance_nearest(x,y,OB_Enemy_Parent


    solltest du die Objekt ID des Gegners bekommen, welcher der Position X/Y am nähesten ist. Dann kann der Code so einfach sein (also ein Bot der auf den nächsten Gegner zulatscht)

    GML-Quellcode

    1. var NextEnemy;
    2. NextEnemy = instance_nearest(x,y,OBJ_Enemy_Parent);
    3. move_towards_point(NextEnemy.x,NextEnemy.y,1);
    ...
  • Benutzer online 2

    2 Besucher