Tastatur - Mehrere Befehle

  • GM 8

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

  • Tastatur - Mehrere Befehle

    Moin Leute,

    ich habe folgenden Code zum prüfen der Tastatureingabe:

    GML-Quellcode

    1. if keyboard_check(ord('Q')) {
    2. color = 1;}
    3. else if keyboard_check(ord('W')) {
    4. color = 2;}
    5. else if keyboard_check(ord('E')) {
    6. color = 3;}
    7. else if keyboard_check(ord('R')) {
    8. color = 4;}
    9. image_index = color;
    10. if keyboard_check_released(vk_anykey){
    11. color = 0;}
    Alles anzeigen


    Wenn ich allerdings "W" gedrückt halte und dann "E" drücke, dann ändert sich die Variable nicht von "2" zu "3". Wenn ich allerdings bei gedrücker "W" Taste "Q" drücke, dann ändert sich die Variable von "2" zu "1".

    Was muss ich tun, damit die neu gedrückte Taste immer die alte überschreibt?


    mfG Stupe
  • Das liegt an dem else, das else sagt quasi "wenn nicht, dann führe das aus".

    GML-Quellcode

    1. if keyboard_check(ord('Q')) {
    2. color = 1;}
    3. else if keyboard_check(ord('W')) {


    Kann man quasi als "wenn Taste 'Q' dann color = 1, wenn nicht Taste 'Q', dann prüfe ob Taste 'W' gedrückt ist" interpretieren. Mach einfach das else weg.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Daran hatte ich auch schon gedacht... Das Ergebnis: Das ganze Prozedere ist genau umgekehrt. Wenn ich "W" und dann "Q" drücke passiert nichts, und wenn ich "W" und dann "E" drücke, dann ändert sich die Variable

    Noch eine Lösung?

    mfG Stupe
  • Daran hatte ich auch schon gedacht... Das Ergebnis: Das ganze Prozedere
    ist genau umgekehrt. Wenn ich "W" und dann "Q" drücke passiert nichts,
    und wenn ich "W" und dann "E" drücke, dann ändert sich die Variable


    Der Code wird von oben nach unten ausgeführt, d.h. die Reihenfolge in dem du die Tasten abfragst bestimmt dann letzendlich auch wie sich die Variable ändert wenn du zwei Tasten drückst. Möglicherweiße willst du keyboard_check_pressed benutzen.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Wenn ich keyboard_check_pressed benutze, dann entsteht ein neues Problem:

    Wenn ich "W" drücke, dann "E", ändert sich die Variable. Lasse ich dann aber "W" los, während ich "E" weiter gedrückt halte, dann ändert sich die Variable zu "0", wegen dem keyboard_check_released(vk_anykey).

    mfG Stupe
  • Dann musst du bei Keyboard check released prüfen ob noch eine andere Taste gedrückt wurde.
    Also

    GML-Quellcode

    1. if keyboard_check_released(vk_anykey)&&!keyboard_check(ord('E'))//usw
    2. {
    3. color = 0;}
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.
  • Du kannst dir einfach auch in einer Liste merken, welche Taste gerade gedrückt ist. Wenn du diese Liste nach der Reihenfolge sortierst, in der die Tasten gedrückt wurden, dann ist immer das letzte Element in der Liste die Taste die du haben willst. Beim Loslassen der Tasten muss die Taste natürlich wieder aus der Liste gelöscht werden.
    Beispiel:

    GML-Quellcode

    1. // create event:
    2. key_list = ds_list_create(); // Liste anlegen
    3. image_speed = 0; // Wir wollen nicht, dass das Sprite von selbst animiert

    GML-Quellcode

    1. // step event:
    2. var changed, index;
    3. changed = false; // dient nur dazu, festzustellen, ob überhaupt eine Änderung passiert ist
    4. if (keyboard_check_pressed(ord('Q'))) {
    5. ds_list_add(key_list, 1); // Taste ans Ende der Liste packen
    6. changed = true; // es ist eine Änderung passiert, also wird nachher image_index aktualisiert
    7. }
    8. if (keyboard_check_pressed(ord('W'))) {
    9. ds_list_add(key_list, 2);
    10. changed = true;
    11. }
    12. if (keyboard_check_pressed(ord('E'))) {
    13. ds_list_add(key_list, 3);
    14. changed = true;
    15. }
    16. if (keyboard_check_pressed(ord('R'))) {
    17. ds_list_add(key_list, 4);
    18. changed = true;
    19. }
    20. if (keyboard_check_released(ord('Q'))) {
    21. index = ds_list_find_index(key_list, 1);
    22. if (index != -1) {
    23. ds_list_delete(key_list, index);
    24. changed = true;
    25. }
    26. }
    27. if (keyboard_check_released(ord('W'))) {
    28. index = ds_list_find_index(key_list, 2); // Position der Taste in der Liste finden
    29. if (index != -1) { // falls die Taste in der Liste ist
    30. ds_list_delete(key_list, index); // löschen
    31. changed = true;
    32. }
    33. }
    34. if (keyboard_check_released(ord('E'))) {
    35. index = ds_list_find_index(key_list, 3);
    36. if (index != -1) {
    37. ds_list_delete(key_list, index);
    38. changed = true;
    39. }
    40. }
    41. if (keyboard_check_released(ord('R'))) {
    42. index = ds_list_find_index(key_list, 4);
    43. if (index != -1) {
    44. ds_list_delete(key_list, index);
    45. changed = true;
    46. }
    47. }
    48. if (changed) { // falls sich was geändert hat
    49. index = ds_list_size(key_list) - 1; // die Position des letzten Elements
    50. if (index > -1) { // falls die Liste nicht leer ist
    51. image_index = ds_list_find_value(key_list, index); // setze den image_index auf den letzten Wert in der Liste
    52. } else {
    53. image_index = 0; // ansonsten auf 0
    54. }
    55. }
    Alles anzeigen

    GML-Quellcode

    1. // destroy event:
    2. ds_list_destroy(key_list)
    Einige meiner Spiele:
  • Benutzer online 3

    3 Besucher