Case

  • GM 8

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

  • Hi Leute
    Ich hätte da mal ne Frage.
    Wie funktioniert den genau der Befehl für "Case" ich habe in der Gamemaker help geschaut, worin mir aber nichts angegeben wurde.
    Also frage ich euch hier.
    Ich habe ein Top down Shooter, worin der Player seine Waffe mit "Q" auf den Boden werfen kann, um platz im Inventar zu erhalten. (Is ja logisch ;) )
    jedoch habe ich im obj_player Q event nun etwa so etwas:

    Spoiler anzeigen

    GML-Quellcode

    1. If global.weapon = "p90"{ instance_create(obj_player.x, obj_player.y, obj_p90) }
    2. If global.weapon = "glock"{ instance_create(obj_player.x, obj_player.y, obj_glock) }
    3. If global.weapon = "uzi"{ instance_create(obj_player.x, obj_player.y, obj_uzi) }
    4. If global.weapon = "ak47"{ instance_create(obj_player.x, obj_player.y, obj_ak47) }
    5. If global.weapon = "mac10"{ instance_create(obj_player.x, obj_player.y, obj_mac10) }
    6. If global.weapon = "knive"{ instance_create(obj_player.x, obj_player.y, obj_knive) }
    7. u.
    8. v.
    9. m.


    Da das mit c.a. 50 Waffen das ganze Spiel UNHEIMLICH Aufbläht und unübersichtlich macht, wollte ich mich mal erkundigen wie ich das mit der Case anwenund lösen könnte.
    (Kommentare empfohlen da ich ja was lernen will ;) )

    Vielen Dank
    Apple987123
  • Du meinst sicherlich die Switch-Case-Anweisung?

    Naja die funktioniert so:

    GML-Quellcode

    1. switch(varName){//<--- varName sollte normaerlweise eine Variable sein, die einen String oder eine Zahl beinhaltet
    2. case deinWert: //dein Code - bei der case deinWert-Anweisung muss dann ein Wert stehen, also case ist ein Schlüsselwort
    3. //vom Game Maker aus und für deinWert setzt du eine Zahl oder einen String ein (Zahl wenn varName eine Zahl ist und
    4. //String, wenn varName ein String ist). Im Klartext: Im Fall deinWert wird dein Code ausgeführt
    5. break; //Mit der break-Anweisung springt der Compiler aus der Switch-Anweisung, ist auch logisch, denn wenn ein Fall
    6. //abgearbeitet wurde, müssen die anderen nicht behandelt werden.
    7. // Und dann geht es eben so weiter
    8. case deinWert2: // dein Code
    9. break;
    10. case deinWert3: // dein Code
    11. break;
    12. //......
    13. }
    Alles anzeigen

    Hoffe das konnte dir helfen.

    Edit: Sorry, dass sich alles verschoben hat -.-.

    MfG ;)

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Ja, aber ich weiß nicht ob der Compiler dir einen Syntax-Fehler anzeigt, wenn du die Doppelpunkte, nach der Case-Anweisung weglässt. Mach es besser so:

    GML-Quellcode

    1. switch (global.weapon){
    2. case "glock": {instance_create(obj_player.x, obj_player.y, obj_glock)}
    3. break;
    4. }

    Und vergiss die geschweiften Klammern nach der Switch-Anweisung nicht ;).

    MfG Trixt0r

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Ich denke, dass florpp damit sagen will, dass es umstädlich wäre,

    GML-Quellcode

    1. if global.weapon = obj_uzi
    2. then instance_create(obj_player.x,obj_player.y,obj_uzi);

    zu schreiben, da ja genauso gut

    GML-Quellcode

    1. instance_create(obj_player.x,obj_player.y,global.weapon);

    geht.
  • Also um ganz genau zu sein: Du speicherst in der Variable nicht einfach den String mit dem Waffennnamen, sondern gleich das Waffenobjekt. Dann kannst du mit einer Zeile alle Waffen erstellen und brauchst nicht diese ganzen Abfragen.

    © 2008 by Teamgrill Productions
  • Benutzer online 1

    1 Besucher