Switch-Statement funktioniert nicht

  • GM 7
  • Switch-Statement funktioniert nicht

    Hi, ich hab mir ein Skript gemacht, dass es die Leben zeichnet.
    Ich könnte zwar auch die Gm interne funktion dafür verwenden, aber ich möchte meinen Skript wahrscheinlich noch ein wenig ausbauen.

    In diesem Skript ist ein Switch-Statement, da ich das sonst noch nie verwendet hab, hab ich in der Hilfe geschaut, wie das funktioniert.

    Aber irgendwie funktioniert das bei mir nicht und es liegt am Switch Statement, da ich es auch mit vielen if's gemacht hab und es da funktioniert hat.

    Hier mal mein Skript:
    Spoiler anzeigen

    GML-Quellcode

    1. var xx,yy,life,sprite;
    2. xx = argument0;
    3. yy = argument1;
    4. life = argument2;
    5. sprite = argument3;
    6. switch (life)
    7. {
    8. case life >= 1: draw_sprite(sprite,0,xx,yy); break;
    9. case life >= 2: draw_sprite(sprite,0,xx+16,yy); break;
    10. case life >= 3: draw_sprite(sprite,0,xx+32,yy); break;
    11. case life >= 4: draw_sprite(sprite,0,xx+48,yy); break;
    12. case life >= 5: draw_sprite(sprite,0,xx+64,yy); break;
    13. case life >= 6: draw_sprite(sprite,0,xx+80,yy); break;
    14. case life >= 7: draw_sprite(sprite,0,xx+96,yy); break;
    15. case life >= 8: draw_sprite(sprite,0,xx+112,yy); break;
    16. case life >= 9: draw_sprite(sprite,0,xx+128,yy); break;
    17. case life >= 10: draw_sprite(sprite,0,xx+144,yy); break;
    18. }
    Alles anzeigen
    Gruß Gamer
  • Falls du dich schon mit der Zählschleife auskennst ( for() ), dann hätte ich hier einen Code, der funktioniert:
    Spoiler anzeigen

    GML-Quellcode

    1. var xx,yy,life,sprite;
    2. xx = argument0;
    3. yy = argument1;
    4. life = argument2;
    5. sprite = argument3;
    6. for (i=1;i<=life;i+=1)
    7. {
    8. draw_sprite(sprite,0,xx+i*16,yy);
    9. }
    Alles anzeigen

    mit einem switch()-Statement wird das erheblich komplizierter:
    (Nur mit 3 Fällen):
    Spoiler anzeigen

    GML-Quellcode

    1. var xx,yy,life,sprite;
    2. xx = argument0;
    3. yy = argument1;
    4. life = argument2;
    5. sprite = argument3;
    6. switch (life)
    7. {
    8. case 1: draw_sprite(sprite,0,xx,yy);
    9. break
    10. case 2: draw_sprite(sprite,0,xx,yy);
    11. draw_sprite(sprite,0,xx+16,yy);
    12. break
    13. case 3: draw_sprite(sprite,0,xx,yy);
    14. draw_sprite(sprite,0,xx+16,yy);
    15. draw_sprite(sprite,0,xx+32,yy);
    16. break
    17. }
    Alles anzeigen
  • GML-Quellcode

    1. var xx,yy,life,sprite;
    2. xx = argument0;
    3. yy = argument1;
    4. life = argument2;
    5. sprite = argument3;
    6. switch (life)
    7. {
    8. case 1: draw_sprite(sprite,0,xx,yy); break;
    9. case 2: draw_sprite(sprite,0,xx+16,yy); break;
    10. case 3: draw_sprite(sprite,0,xx+32,yy); break;
    11. case 4: draw_sprite(sprite,0,xx+48,yy); break;
    12. case 5: draw_sprite(sprite,0,xx+64,yy); break;
    13. case 6: draw_sprite(sprite,0,xx+80,yy); break;
    14. case 7: draw_sprite(sprite,0,xx+96,yy); break;
    15. case 8: draw_sprite(sprite,0,xx+112,yy); break;
    16. case 9: draw_sprite(sprite,0,xx+128,yy); break;
    17. case 10: draw_sprite(sprite,0,xx+144,yy); break;
    18. }
    Alles anzeigen

    So müsste es gehen.
    MfG Henrik1235
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • ich glaub so funktionierts nicht, da es dann immer nur ein Leben zeichnet, ich habs zwar nicht ausprobiert, aber ich glaub Toshiros Lösung ist die richtige.
    Von daher hab ich jetzt die viel kürzere For-Schleife genommen.
    Gruß Gamer
  • ich glaub so funktionierts nicht, da es dann immer nur ein Leben zeichnet, ich habs zwar nicht ausprobiert, aber ich glaub Toshiros Lösung ist die richtige.
    Von daher hab ich jetzt die viel kürzere For-Schleife genommen.

    :pinch: Hab den Code nicht verstanden. Aber warum nimmst du dann nicht die interne Funktion?
    'Draw Life Images'

    GML-Quellcode

    1. var a;
    2. a=0;
    3. repeat(lives)
    4. {
    5. draw_sprite(sprite0,0,view_xview+a,view_yview);
    6. a+=16;
    7. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • henrik1235 schrieb:

    ...'Draw Life Images'

    GML-Quellcode

    1. var a;
    2. a=0;
    3. repeat(lives)
    4. {
    5. draw_sprite(sprite0,0,view_xview+a,view_yview);
    6. a+=16;
    7. }

    Dieser Code ist zwar auch editierbar, jedoch entspricht er im großen und Ganzen meinem Code, da die hier verwendete repeat()-Schleife einer Zählschleife entspricht.
  • Ich kann es gerade nicht testen, aber es sollte funktionieren, wenn du die breaks weglässt:

    GML-Quellcode

    1. var xx,yy,life,sprite;
    2. xx = argument0;
    3. yy = argument1;
    4. life = argument2;
    5. sprite = argument3;
    6. switch (life) {
    7. case 10: draw_sprite(sprite,0,xx+144,yy);
    8. case 9: draw_sprite(sprite,0,xx+128,yy);
    9. case 8: draw_sprite(sprite,0,xx+112,yy);
    10. case 7: draw_sprite(sprite,0,xx+96,yy);
    11. case 6: draw_sprite(sprite,0,xx+80,yy);
    12. case 5: draw_sprite(sprite,0,xx+64,yy);
    13. case 4: draw_sprite(sprite,0,xx+48,yy);
    14. case 3: draw_sprite(sprite,0,xx+32,yy);
    15. case 2: draw_sprite(sprite,0,xx+16,yy);
    16. case 1: draw_sprite(sprite,0,xx,yy);
    17. }
    Alles anzeigen
    Er sucht hier den Wert heraus und führt allen Code aus, bis er auf ein break oder das Ende des switches trifft.

    Vergleiche gibt es in switches nicht :P
    Ich würde allerdings zu der for-Methode raten ;D
  • Benutzer online 2

    2 Besucher