Switch Case für Tastaturabfragen?

  • GM 8

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

  • Switch Case für Tastaturabfragen?

    Hi... :)

    Ich habe in meinem Weltraumspiel Infobildschirme, die Infos über den Spieler, das Schiff, den Sektor usw. anzeigen.

    Kann man mit Switch Case die Tastatur abfragen und wenn ja, wie muss das aussehen?

    GML-Quellcode

    1. switch(keyboard_check_pressed)
    2. {
    3. case ord('S'): game_end(); break;
    4. }

    und

    GML-Quellcode

    1. switch(keyboard_check_pressed)
    2. {
    3. case S: game_end(); break;
    4. }

    funktionieren beide nicht, weil keyboard_check_pressed natürlich keine Variable ist. Wie muss das Konstrukt aussehen, damit ich mit case: die gedrückte Taste abfragen kann? :huh:

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }
  • Irrenhaus3 schrieb:

    keyboard_key und keyboard_lastkey sind die Variablen, die du suchst. Ersteres für gedrückt gehaltene Tasten, letzeres für die Simulation von Pressed-Events.
    Sehr schön, danke! :)

    Bei case: muss man dann den gleichen Code eingeben, mit dem man die Tastatur via if-Abfragen (if keyboard...) abfragt. Alternativ kann man auch mit den Key-Zahlencodes arbeiten, aber so ist das wesentlich intuitiver. Hier ein Beispielcode, damit es auch andere genau verstehen. So könnte das aussehen:

    GML-Quellcode

    1. switch (keyboard_key) // Abfragen, welche Taste gerade gedrückt wird
    2. {
    3. case ord('W'): return y-10; // Wenn W-Taste gedrückt, 10 Pixel nach oben bewegen
    4. case ord('A'): return x-10; // Wenn A-Taste gedrückt, 10 Pixel nach links bewegen
    5. case ord('S'): return y+10; // Wenn S-Taste gedrückt, nach 10 Pixel unten bewegen
    6. case ord('D'): return x+10; // Wenn D-Taste gedrückt, nach 10 Pixel rechts bewegen
    7. case vk_enter: return room_goto_next(); // Wenn Entertaste gedrückt, zum nächsten Raum wechseln
    8. }

    Gerade herausgefunden: Wenn man keyboard_lastkey verwendet, um die Tastatur nur ein einziges Mal abzufragen, muss man aber im case-Code den zuletzt gedrückten Knopf leeren, sonst wird die Abfrage, wenn sie im Step- oder Draw-Event passiert unendlich wiederholt, weil der zuletzt gedrückte Knopf gespeichert bleibt. Beispiel: (Enter gedrückt, Code nur ein einziges Mal ausführen):

    GML-Quellcode

    1. case vk_enter: do something; keyboard_lastkey = 0; break;

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Bonsaiheld ()