Gravitations frage

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

  • Gravitations frage

    Hallo freunde

    ich wollte das mein spieler auf knopfdruck die gravitation ändern kann also das er wenn der den knopf G drückt dann plötzlich die gravitation ändert und auf die decke fliegt und wenn er nochmal drückt wieder auf dem boden...vspeed bestimmt bei mir die gravitation....

    ich habe es versucht mit

    GML-Quellcode

    1. if keyboard_check(ord("G"))
    2. {
    3. if place_meeting(x,y+1,obj_block)
    4. if gravity_direction <=270
    5. gravity_direction=90;
    6. vspeed-=1;
    7. else
    8. if place_meeting(x,y-1,obj_block)
    9. if gravity_direction<=90
    10. gravity_direction=270;
    11. vspeed+=1
    12. }
    Alles anzeigen


    aber natürlich geht das nicht...bitte um hilfe
  • Ich würde es mit einer einfachen Variable checken.

    Create:

    GML-Quellcode

    1. ​g_d = 0; //Gravitations Direction

    Step:

    GML-Quellcode

    1. if keyboard_check_pressed(ord("G"))
    2. g_d = !g_d;
    3. if (g_d == 0)
    4. vspeed += 1;
    5. else
    6. vspeed -= 1;


    Ich weis nicht ob du das mit ! kennst. Ich benutze es, weil es sehr Hilfreich ist:
    Wenn g_d 0 ist, macht g_d = !g_d; 1 draus und anders herum. Hinter der Abfragen ob G gedrückt wird wird halt abgefragt, ob g_d auf 0 ist also normale Gravitation haben soll, oder g_d auf 1 ist um dann die Gravitation nach oben zu machen.
    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 echt toll.
    es funktioniert
    jetzt muss ich es nur mehr machen das sich das spieler sprite ändert...das muss ich wohl mit image_yscale machen nur bin ich nicht sicher wie...

    und eins noch....

    wenn ich den code mit der gravitation benutze und dann oben an der decke bin funktioniert das springen nicht mehr.wo muss ich es ändern das ich dort auch springen kann.
    EDIT: SPRINGEN SCHON GELÖST



    ich versteh deinen code nicht ganz...woher weis er was g_d = 0 für eine gravitation ist????achso durch das vspeed oder???

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

  • Irgendwo am Anfang, z.B. Create Event oder Room Start oder was auch immer, setzt du gravity_direction auf einen Anfangswert, z.b. 270 wenn der Spieler am Boden anfangen soll. Dazu kommt noch eine 2. Variable die im Verlauf des Spiels nur 1 oder -1 beträgt, je nachdem welche Gravitationsrichtung man hat. Die kannst du dann in allen Positionsberechnung/abfragen verwenden.

    GML-Quellcode

    1. gravity_direction = 270 // 90 wenn der Spieler an der Decke starten soll
    2. gdir = 1 // -1 wenn der Spieler an der Decke starten soll


    GML-Quellcode

    1. if (keyboard_check_pressed(ord("G")))
    2. {
    3. gdir *= -1 //gdir umdrehen
    4. gravity_direction += gdir * 180 // je nach gdir 180 addieren oder subtrahieren um von 90 auf 270 oder von 270 auf 90 zu kommen
    5. }
    6. if (place_meeting(x, y + gdir, obj_block))
    7. {
    8. vspeed += gdir * geschwindigkeit // ersetze geschwindigkeit mit der geschwindigkeit die du haben willst.
    9. }


    Edit:
    Auch die Sprite Transformation kannst du mit gdir lösen

    GML-Quellcode

    1. image_yscale = gdir // 1 ist normal, -1 ist vertikal gespiegelt

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von -$Marvin$- ()

  • danke für die antworten


    @husi012
    ja ich weiß das man mit sprite_index das sprite ändert jedoch funktioniert es nicht....

    ich habe schon im create event eine variable namens lastpressed=right

    und im step event diesen code:

    GML-Quellcode

    1. if place_free(x,y+10) //Abfrage wenn wir springen dann sollen die sprites verwendet werden und wenn wir am boden sind diese sprites....
    2. { //In der Luft
    3. if lastpressed == "right"
    4. sprite_index =spr_player_jump_right // Nach Rechts Schauen
    5. else
    6. sprite_index = spr_player_jump_left // Nach Links Schauen
    7. }
    8. else
    9. { //Am Boden
    10. if lastpressed == "right"
    11. sprite_index = spr_player_run_right // Nach Rechts Schauen
    12. else
    13. sprite_index = spr_player_run_left // Nach Links Schauen
    14. }
    Alles anzeigen


    das funktioniert auch alles jedoch sobald ich den code von dir benutze und dann auf der decke stehe ändert er keine sprites.wie kann ich das machen......

    und ich habe mit image_yscale gemacht das sich das sprite dreht aber ich will das es sich langsam gegen den urhzeiger dreht...kann ich das auch irgendwie machen....

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