Leiter hochgehen in JnR

  • GM 7

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

  • Leiter hochgehen in JnR

    Hallo zusammen,
    habe mir schon einige Gamemaker Tutorials angeschaut und wollte mich nun einem JnR Spiel widmen. Dort habe ich ein Problem mit den Leitern. Ich habe es schon hinbekommen, dass der Spieler wenn er die Leiter berührt hoch und runter gehen kann. Wenn man ganz oben angelangt ist sollte der Spieler einmal hochspringen. Doch der Spieler bewegt sich immer schnell hoch und runter wenn man ganz oben ist und die Hochtaste gedrückt hält.

    Ich bin noch ein Gamemaker Anfänger und arbeite teils noch mit DnD, deswegen ist im Playerobjekt auch zwischen GML etwas DnD vorhanden. Hier mal ein paar Events des Spielerobjekts:
    Spoiler anzeigen

    GML-Quellcode

    1. //Create Event
    2. global.richtung := "rechts";
    3. global.springend := "nicht";

    GML-Quellcode

    1. //Step Event
    2. depth = -2000;
    3. if (place_meeting(x,y+vspeed,Black_U)) && (vspeed < 0) { //Black_U ist ein solides Objekt, welches über Tiles gelegt wird
    4. move_contact_solid(90,vspeed);
    5. vspeed = 0;
    6. global.springend := "nicht";
    7. }
    8. if (place_meeting(x,y+vspeed,Black_U)) && (vspeed > 0) {
    9. move_contact_solid(270,vspeed);
    10. vspeed = 0;
    11. global.springend := "nicht";
    12. }
    13. /*DnD*/ if the relative position (0,1) gives a collision with only solid objects then {
    14. gravity := 0;
    15. gravity_direction := 270;
    16. global.springend := "nicht";
    17. if (global.richtung = "rechts") && (keyboard_check_direct(vk_right)=false) then
    18. sprite_index := Player_rechts_still;
    19. else if (global.richtung = "links") && (keyboard_check_direct(vk_left)=false) then
    20. sprite_index := Player_links_still;
    21. } else {
    22. gravity := 0.6;
    23. gravity_direction := 270;
    24. if global.richtung = "rechts" then
    25. sprite_index := Player_rechts_Sprung;
    26. else
    27. sprite_index := Player_links_Sprung;
    28. }
    29. if vspeed > 13 then vspeed := 13;
    30. if (position_meeting(x,y,Tower_Leiter2)) then {
    31. gravity_direction := 270;
    32. gravity := 0;
    33. vspeed := 0;
    34. with Tower_U2 instance_change(Tower_U3,false); //Tower_U und Tower_U2 sind genau wie Black_U, Tower_U3 ist nicht solide
    35. } else
    36. with Tower_U3 instance_change(Tower_U2,false);
    Alles anzeigen

    GML-Quellcode

    1. //Key Up Event
    2. if (position_meeting(x, y,Tower_Leiter2))==true then {
    3. if (place_free(x,y-3))== true then {
    4. y -= 3;
    5. }
    6. } else
    7. if (place_free(x+4,y))==true then {
    8. global.springend := global.richtung;
    9. if global.springend = "rechts" then sprite_index := Player_rechts_Sprung;
    10. else sprite_index := Player_links_Sprung;
    11. }
    12. /*DnD*/ if the relative position (0,1) gives a collision with only solid objects
    13. vspeed := -10;
    Alles anzeigen


    Ich hoffe ihr sieht, wieso das so ist und habt eine Lösung für das Springen, wenn man ganz oben an der Leiter angelangt ist!
  • @henrik1235: Dann funktioniert das Springen vom Boden aus gar nicht. Wenn ich jedoch die Leiter hochgehe springt er hoch - so solls ja auch sein - aber dann springt er immer weiter bis man loslässt und ab dann kann man beliebig in der Luft herumspringen, weil durch das "NOT" ja abfragt wird, ob dort keine Kollision ist (= in der Luft) und der Spieler dann springen soll.
  • Ahja, vielen Dank! Die Leiter funktioniert jetzt perfekt - Man springt einmal hoch wenn man oben angelangt ist, aber vom Boden aus kann man immernoch nicht springen.

    Edit: Okay, Problem gelöst.

    GML-Quellcode

    1. /*DnD*/ if the relative position (0,1) gives a collision with only solid objects
    () Habe die relative Position (0,0) angegeben, so funktioniert alles.

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