GMS 1.4 : keyboard_check_pressed funktioniert nicht mehr

    GMS 1.4 : keyboard_check_pressed funktioniert nicht mehr

    Hi Leute,

    bin dabei einen altes Spiel (H.E.R.O.) von GM8 nach GMS 1.4 zu portieren, was soweit auch schon funktioniert.
    Allerdings komme ich bei einer Sache einfach nicht weiter, einer einfachen "Press any Key" Routine.

    Unter GM8 hatte ich dafür ganz simpel folgendes benutzt:

    GML-Quellcode

    1. ​while !keyboard_check_pressed(vk_anykey) continue;


    Unter GMS 1.4 will das aber nicht mehr, die Schleife beendet sich einfach nicht.
    Geben tut es dies ja noch, aber es will nicht wie es soll, egal wo ich das nun einsetze.

    Hat jemand eine Idee?
    ---------------------------
    http://games.pixas.de
    ---------------------------
    Für mich sieht nichts falsch aus. Probiere mal Klammern zu setzen und continue mit geschweiften Klammern zu ersetzen:

    GML-Quellcode

    1. while (!keyboard_check_pressed(vk_anykey)) {}


    Hängt sich denn das Spiel auf oder passiert nichts?
    Denn diese Methode lässt das Spiel eigentlich freezen und ist sehr unsauber.
    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
    Danke schon mal, ich teste das heute Abend.

    Spiel hängt sich nicht auf, es bleibt nur in dieser Zeile hängen.
    ---------------------------
    http://games.pixas.de
    ---------------------------

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Skywalker“ ()

    Warum versuchst du es nicht umgekehrt, anstatt zu überprüfen, ob eine Taste noch nicht gedrückt wurde, überprüfst du einfach, ob eine gedrückt wurde.

    if (keyboard_check_pressed(vk_anykey) ...

    Oder führt das nicht zu deinem gewünschem Ergebnis?
    So hättest du nicht permanent eine Schleife, die dein Program jede Step abarbeiten muss.
    Habe es nun testen können.

    GML-Quellcode

    1. while (!keyboard_check_pressed(vk_anykey)) {}

    Das obige funktioniert auch nicht.
    Extra mal ein leeres Programm erstellt was eigentlich nichts anderes als diese Zeile, gefolgt von einem "game_end(), beinhaltet.
    Geht auch nicht.

    @icqgamer
    Weiß nicht wie ich es anders machen soll. Das Programm soll an dieser Stelle ja anhalten, da eine Abfrage (z.B. Programm beenden J/N) stattfinden soll.
    Dafür darf und soll das Spiel ja erstmal nicht mehr weiterlaufen. Nach der Zeile soll dann die Abfrage erfolgen ob "J" gedrückt wurde.

    Ich finde das sehr merkwürdig, vielleicht kann mal von euch jemand das bei sich testen. Wäre sehr nett.
    ---------------------------
    http://games.pixas.de
    ---------------------------
    Muss mich mal schnell korrigieren.
    Habe jetzt nochmal im alten Source aus GM8 nachgeschaut. Dort hatte ich ein "keyboard_wait()" eingesetzt.
    Die Umsetzung auf GMS hatte ich schon vor einiger Zeit mal angefangen und da dann das mit dem "while..." eingebaut.
    Deshalb: Unter GM8 funktioniert das auch nicht aber unter GMS bin ich mir ziemlich sicher das es mal funktionierte.
    ---------------------------
    http://games.pixas.de
    ---------------------------

    GML-Quellcode

    1. //Create Event
    2. accepted = false;


    GML-Quellcode

    1. //Step Event
    2. if (keyboard_check_pressed(vk_anykey)) {
    3. accepted = true;
    4. }
    5. if (accepted) {
    6. //...
    7. }
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Danke, aber das Spiel wird dadurch auch nicht angehalten.
    Im Grunde würde es mit "show_question(str);" funktionieren. Nur gefiel mir das nie und deshalb hatte ich mir was eigenes gebaut, was ja jetzt auch nicht mehr geht.

    Was aber z.B. funktioniert wäre:

    GML-Quellcode

    1. while !keyboard_check_direct(vk_enter) continue;

    Aber leider nicht:

    GML-Quellcode

    1. while !keyboard_check_direct(vk_anykey) continue;


    Bin immer noch total ratlos.
    ---------------------------
    http://games.pixas.de
    ---------------------------
    deaktiviere doch einfach alle instanzen außer die mit der Frage/ etc.


    show_question(str); solltest du niemals verwenden, wenn du ein game veröffentlichst
    • Bluetooth Multiplayer
    • Wasser App: play.google.com/store/apps/details?id=com.gaming_apps.water_physics_simulation
    • :shifty: :motz:
    Ich denke das Problem ist folgendes:

    Wenn du im Step Event schreibst, dass das Programm stoppen soll, wenn eine Taste gedrückt wird, dann wird es für diese Step gestoppt.
    Danach jedoch läuft die nächste Step und somit die nächste Überprüfung der while-Schleife.
    Mit einer festen Variable, welche du im Create Event definierst, könntest du dein gewünschtes Ergebnis erreichen.

    Variante 1:
    - Du deklarierst im Create Event stop = false;
    - Du schreibst im Step-Event while (stop == false) { Dein Code }
    - Im Keyboard-Event bei "Keyboard Pressed - Any Key" oder im Step Event mit if keyboard_check_pressed(vk_anykey) setzt du die Variable stop auf true.

    Variante 2:
    - Du packst deinen Code while (keyboard_check_pressed(vk_anykey) == false) bspw. in ein Alarm Event, wo es nicht permanent ausgeführt wird, sondern nur solange die Bedingung false ist und verweist im Create Event auf dein Alarm mit alarm[deine Alarmnummer] = 1

    Ich kann leider nichts garantieren, da ich es selber nicht testen konnte. Einen Versuch ist es wert.