Schleife richtig setzen

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

  • Schleife richtig setzen

    Hi,
    Ich habe folgenden Code:

    GML-Quellcode

    1. if (global.player_play == 1 == true)
    2. {
    3. with Player1 if (position_meeting(x + 0, y + 0,Schwert))
    4. {
    5. with Slot_Boden_frei instance_change(Schwert_Boden,false);
    6. if (instance_exists (Slot_Boden_frei) == false)
    7. {
    8. if (instance_exists (Slot_Boden) == true)
    9. {
    10. with Jumper_Boden x = Slot_Boden.x;
    11. with Jumper_Boden y = Slot_Boden.y;
    12. }
    13. }
    14. }
    15. }
    Alles anzeigen


    Und ich möchte hier eine Schleife einbauen. Wenn der Jumper Slot_Boden berührt wird aus ihm auch wieder ein Slot_Boden_frei. Er soll diesen Vorgang also einmal komplett abschließen und oben wieder neu anfangen da ja ein neues Objekt Slot_Boden_frei entsteht und das ganze so lange bis Slot_Boden/bzw._Frei nicht mehr existiert oder sich kein Objekt Schwert mehr an der Position Player.x,y befindet.
    Ich habe es ein paar mal mit einer repeat-Schleife versucht da mir das nach Lesen der Einsteigerrefferenz und den anderen Schleifen-Threads am sinnvollsten erschien, allerdings bringe ich mit meinen Versuchen bisher nur den GM zum Stillstand.
  • Also, habe ich richtig verstanden; du willst, dass dein Code so lange ausgefuehrt wird, bis sich kein Objekt Schwert mehr an der Position des Players mehr befindet?
    Spoiler anzeigen

    Wenn ja, duerfte das funktionieren:

    GML-Quellcode

    1. do {
    2. // das was getan werden soll.
    3. }
    4. until ( !place_meeting(Player.x,Player.y,Schwert) ) // bis sich kein schwert mehr an der position des players befindet.

  • if (global.player_play == 1 == true) // == 1 == true?! Das == true ist hier überflüssig
    {
    //Da der folgende Code über mehrere Zeilen geht, muss hier eine Klammer hin!!
    //Außerdem kann man hier den Punktoperator verwenden, um direkt zuzugreifen!
    with Player1 if (position_meeting(x + 0, y + 0,Schwert))
    {
    with Slot_Boden_frei instance_change(Schwert_Boden,false);
    if (instance_exists (Slot_Boden_frei) == false)
    {
    if (instance_exists (Slot_Boden) == true)
    {
    with Jumper_Boden x = Slot_Boden.x; //Hier ebenfalls den Punktoperator benutzen
    with Jumper_Boden y = Slot_Boden.y; //Hier ebenfalls den Punktoperator benutzen
    }
    }
    }
    }


    Ich weiß war nicht, was da jetzt los war, aber ich finde, du solltest dir den Klammerneinzug angewöhnen. Außerdem gibts da einige stellen die sehr unlogisch und überflüssig sind:

    Erstmal ist der Code komplett falsch und kann nicht laufen, weil du eine with über mehrere Zeilen benutzt fehlen da Klammern. Außerdem kann man mit dem Punktoperator direkt auf Variablen zugreifen und muss nicht erst with benutzen. Das ist umständlich, raubt Zeit, ist unübersichtlich und nervt auf Dauer ;)

    Hier der berichtigte Code:

    GML-Quellcode

    1. if (global.player_play == 1)
    2. {
    3. if (position_meeting(Player1.x, Player1.y, Schwert))
    4. {
    5. with Slot_Boden_frei { instance_change(Schwert_Boden,false); }
    6. if (instance_exists (Slot_Boden_frei) == false)
    7. {
    8. if (instance_exists (Slot_Boden) == true)
    9. {
    10. Jumper_Boden.x = Slot_Boden.x;
    11. Jumper_Boden.y = Slot_Boden.y;
    12. }
    13. }
    14. }
    15. }
    Alles anzeigen


    Hmm sorry an dir liegts dann nicht der Beitragseditor spinnt mal wieder.
  • Danke das sich nach so langer Zeit doch noch einer meldet.
    Der Code stammt aus dem Übersetzungstool und enthält daher ein paar unnötige true`s und sieht recht hässlich aus (lohnt sich allerdings nicht die extra rauszufiltern)... wie es mit den with`s aussieht kann ich das im Moment nicht sagen.
    Allerdings funktioniert er einwandfrei, nur fehlt halt die Möglichkeit dem GM das mehrmals durchlaufen zu lassen und irgendwie erkenne ich in deinem Script nicht das er diese Aktion wiederholt.
    Irre ich mich da?
  • Benutzer online 1

    1 Besucher