immer die aktuellste Taste annehmen... nur wie?

  • GM 8

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

  • immer die aktuellste Taste annehmen... nur wie?

    Hallo,

    Nach einer längeren Pause habe ich mich nun wieder an den GM gesetzt und möchte ein neues Projekt welches in meinem Kopf Gestalt angenommen hat ausprobieren. Diesmal möchte ich, zum ersten mal, so weit wie sinnvoll zur Gänze GML benutzen...dadurch brauche ich noch sehr lange für sehr wenig Code. aber egal.

    Nun zu meiner eigentlichen Frage: Ich habe ein simples Topdown-Zelda-like-adventure im Kopf. Jetzt sollen die Pfeiltasten auf der Tastatur die Bewegung ausmachen. das sieht dann in meiner GML so aus:

    Quellcode

    1. if (sprite_index != sprr_plwalkleft) {
    2. sprite_index = sprr_plwalkleft
    3. image_speed = 0.1
    4. }
    5. obj_player.x -= 1


    und zwar steht das im Event für die Linke Pfeiltaste. Mein Problem: Ich möchte gerne nicht durch gleichzeitiges drücken zweier Pfeiltasten diagonal laufen. Am liebsten wäre mir wenn immer nur die zuletzt gedrückte Taste diejenige ist, die die bewegungsrichtung angibt. (Beispiel: ich halte "links" gedrückt, und drücke nach 1sekunde zusätzlich "oben" dann soll der charakter nur nach oben laufen. andersherum genauso.)
    Ich habe schon verschiedene sachen ausprobiert, aktuell diese Variante:

    Quellcode

    1. if keyboard_check(vk_up) = true
    2. exit
    3. if keyboard_check(vk_down) = true
    4. exit
    5. if keyboard_check(vk_right) = true
    6. exit
    7. if (sprite_index != sprr_plwalkleft) {
    8. sprite_index = sprr_plwalkleft
    9. image_speed = 0.1
    10. }
    11. obj_player.x -= 1
    Alles anzeigen


    in jedem der vier Tastatur-events. Natürlich führt das aber dazu, dass beim druck der zusätzlichen Taste jede Bewegung anhält...
    Wie gehe ich mein Problem am besten an...?

    Ich hoffe mein Problem einigermaßen verständlich rübergebracht zu haben... Und entschuldigt die wenige Erfahrung die ich mit GML habe...

    Besten Dank!
    Waki
  • Du könntest eine Variable bestimmen, die die Richtung festlegt und wenn eine neue Taste gedrückt wird, dann wird der alte Wert in der Variable überschrieben, dazu solltest du dann nur den Code für die Bewegung aus den einzelnen Events packen und zusammen mit einer Else-If oder Switch Verzweigung in das Step Event werfen.
    Sollte dann ca. so aussehen:

    GML-Quellcode

    1. switch (i)//Die Variable für die Richtung
    2. {
    3. case 1:
    4. //Dein Code - Richtung 1
    5. break;
    6. case 2:
    7. //Dein Code - Richtung 2
    8. break;
    9. case 3:
    10. //Dein Code - Richtung 3
    11. break;
    12. case 4:
    13. //Dein Code - Richtung 4
    14. break;
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von xGamer336 ()

  • Okay, diese switch-sache sieht sehr praktisch aus, werde ich mir angewöhnen. Aber was passiert bei deinem Code wenn ich 2 Tasten gleichzeitig drücke? Dann ändert der Spieler doch pro Step 2 msl die Variable... Und ich weiß nicht welche Änderung als letztes erfolgt... Verstehst du was ich meine? Ich denke, dadurch ist nicht gewährleistet dass immer die aktuellste Taste die Richtung vorgibt... Oder irre ich da?
  • Perfekt! Das klingt ja einfach mal nach der Lösung. Vielen Dank!

    Edit: Eine Frage noch, diese Switch verzweigung, da muss ich mich vage an den informatikunterricht in der oberstufe erinnern... Wie nennt man das denn? So einen Baustein wie dieser switch oder eine if-then abfrage oder so eine repeat until sache... Sprich: ich möchte mich da mehr informieren was es für programmier-technische kniffe in GML gibt... Wäre für einen tip wo ich darüber informationen bekomme dankbar!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Wakizashi89 ()