hab mal eine verständnis-frage

  • hab mal eine verständnis-frage

    hi,
    wenn ich folgendes schreibe...

    GML-Quellcode

    1. if (keyboard_check(vk_right||ord('D'))) && !(keyboard_check(vk_left))
    2. {
    3. if (place_meeting(x+4,y,obj_boden_par))
    4. {
    5. move_contact_solid(0,4);
    6. }
    7. else {x += 4;}

    dann läuft der auf jeder taste nach rechts, also nicht nur auf taste d sondern auch auf a, b,c,e....etc.

    wenn ich das aber so schreibe

    GML-Quellcode

    1. if (keyboard_check(vk_right)) ||(keyboard_check(ord('D')) && !(keyboard_check(vk_left))
    2. {
    3. if (place_meeting(x+4,y,obj_boden_par))
    4. {
    5. move_contact_solid(0,4);
    6. }
    7. else {x += 4;}

    Dann funktioniert das einwandfrei....

    kann mir einer erklähren warum das so ist?? Warum ich das nicht wie im ersten beispiel schreiben kann???

    lg gruen


  • ||, auch bekannt als or, bewertet die Variablen als Wahrheitswerte, also entweder true oder false. Da der GM statt Booleans auch Double (Gleitkommazahlen) verwendet, behandelt er <= 0.5 als false und >0.5 als true. Das Ergebnis allerdings ist immer entweder 0 oder 1. Und in dem Fall wird vk_right||ord('D') zu 1.
  • &&, || und ^^ prüfen zwei Werte und geben dann entweder true oder false zurück. Damit kann keyboard_check() aber nichts anfangen :P Du könntest allerdings ein Script schreiben:

    GML-Quellcode

    1. // keyboard_check2(key1,key2)
    2. // returns if one of the keys is pressed
    3. var key1,key2;
    4. key1 = argument0;
    5. key2 = argument1;
    6. return (keyboard_check(key1) || keyboard_check(key2));
    Benutzen kannst du es dann so:

    GML-Quellcode

    1. if (keyboard_check2(vk_right,ord('D')) && !keyboard_check(vk_left)) { // ...
  • Benutzer online 1

    1 Besucher