Das "else" einer for-Schleife

  • GM 8

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

  • Das "else" einer for-Schleife

    Hey Leute,

    habe hier eine relativ simple for-Schleife:

    Spoiler anzeigen

    GML-Quellcode

    1. var i;
    2. for (i=-5; i=5; i+=1)
    3. {
    4. if !place_meeting(x - hsp, y - i,boden)
    5. {
    6. x -= hsp;
    7. y -= i;
    8. break;
    9. }
    10. }


    Nun möchte ich ein else { } // do something nach der !place_meeting Überprüfung stehen haben.
    Problem: var i beginnt bei -5 und falls dort Boden ist, wird direkt das else statement ausgeführt. Jedoch soll es so sein, dass erst alle möglichen Werte von i überprüft werden und erst dann etwas anderes passieren soll.
    Sprich: if !place_meeting(x-hsp,y-[-5 bis 5],boden)...else

    Mit 10 if-Abfragen funktioniert es zwar, aber das muss man doch auch zusammenfassen können. Bin also dankbar für jede Hilfe ;)
  • nach der schleife

    GML-Quellcode

    1. if i = 5
    2. and if !place_meeting(x - hsp, y - i,boden)
    3. //mache etwas :D
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • husi hat da den richtigen Ansatz - ich würde das aber zusätzlich noch mit einem bool überprüfen, erwa so:

    GML-Quellcode

    1. flag = false;
    2. for(i=n;i<m;i+=1){
    3. /* etwas code */
    4. if (bedingung){
    5. /* bedingter code */
    6. flag = true;
    7. }
    8. /* mehr unbedingter code */
    9. }
    10. if (flag){
    11. /* irgendwas in der schleife hat die bedingung erfüllt */
    12. }
    13. else{
    14. /* die schleife hat nichts ergeben */
    15. }
    Alles anzeigen


    Außerdem ein Tipp an der Stelle:
    Es gibt in for- und while-Schleifen auch das Schlüsselwort continue. Das ist verwandt mit break, aber es springt in die nächste Iteration der Schleife, anstatt sie ganz abzubrechen. Ist für deinen Fall hier zwar nicht so wichtig, aber für die Zukunft vielleicht nützlich zu wissen. ;)