Problem mit der Leiter

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

  • Problem mit der Leiter

    Hallo

    Also ich habe eine Leiter die ich raufklettern kann mit dem Player.
    Dafür hab ich diesen Code benutzt:

    GML-Quellcode

    1. [b][/b]if keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")) ///springen
    2. {
    3. if place_free(x,y+10)== false
    4. vspeed-=20;
    5. }
    6. if place_meeting(x,y,obj_leiter)== true // Leiter hochklettern
    7. {
    8. if keyboard_check(vk_up) or keyboard_check(ord("W"))
    9. {ispressed="up"
    10. image_speed=0.3;
    11. sprite_index=spr_player_klettern;
    12. vspeed=-4;
    13. }
    14. else if
    15. keyboard_check(vk_down) or keyboard_check(ord("S"))
    16. {ispressed="down"
    17. image_speed=0.3;
    18. sprite_index=spr_player_klettern;
    19. vspeed=4
    20. }
    21. else
    22. {
    23. image_speed=0;
    24. sprite_index=spr_player_klettern;
    25. vspeed=0;
    26. }
    27. }
    Alles anzeigen



    Und das funktioniert wunderbar nur das problem ist das er das sprite_player_klettern zu früh anzeigt.also schon kurz vor der leiter. also ein kleiner teil des player sprites steht rechts oder links über die leiter.
    ich dachte das kann ich mit einer kleineren collisionsmaske ändern aber das funktioniert nicht.

    weiß jemand rat??

    falss ihr nicht versteht was ich meine kann ich auch ein kleines video machen.
  • ich glaube auf die Schnelle würd ich das so lösen:
    anstatt place_meeting die Koordinaten nehmen:

    GML-Quellcode

    1. dis = 5; //Distanz zwischen der Leiter und dem Spieler
    2. if x-obj_leiter.x < dis and x-obj_leiter.x > -dis
    3. //Code


    Jetzt mag ich diese Textfelder So genial!
    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 hab es probiert und eigentlich funktioniert es jedoch hab ich jetzt das problem das wenn ich mit vk_space den pfeil abschießen will
    zeigt er mir eine fehlermeldung mit den code if x-obj_leiter.x < dis and x-obj_leiter.x > -dis

    Versteh nicht ganz warum weil es hat ja garnichts damit zu tun
  • Warum benutzt man dafür nicht gleich distance_to_object?

    GML-Quellcode

    1. //Springen
    2. if keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")) {
    3. if place_free(x,y+10) == false {
    4. vspeed -= 20;
    5. }
    6. }
    7. //Wenn Distanz zur Leiter kleiner gleich 1 ist und man entweder UP oder W drückt
    8. if distance_to_object(obj_leiter)<=1 && (keyboard_check(vk_up) or keyboard_check(ord("W"))) {
    9. ispressed = "up";
    10. image_speed = 0.3;
    11. sprite_index = spr_player_klettern;
    12. vspeed = -4;
    13. }
    14. //Ansonsten, wenn die Distanz zur Leiter kleiner gleich 1 ist und man entweder DOWN oder S drückt
    15. else if distance_to_object(obj_leiter)<=1 && (keyboard_check(vk_down) or keyboard_check(ord("S"))) {
    16. ispressed = "down";
    17. image_speed = 0.3;
    18. sprite_index = spr_player_klettern;
    19. vspeed = 4;
    20. }
    21. //Ansonsten, wenn die Distanz zur Leiter kleiner gleich 1 ist und man keine Taste drückt (Man ist evtl noch auf der Leiter)
    22. else if distance_to_object(obj_leiter)<=1 {
    23. image_speed = 0;
    24. sprite_index = spr_player_klettern;
    25. vspeed = 0;
    26. }
    27. //Ansonsten, wenn man sich nicht in der Nähe der leiter befindet (So soll der Spieler wieder "normal" sein)
    28. else {
    29. image_speed = 0;
    30. sprite_index = spr_player_xxx;
    31. vspeed = 0;
    32. }
    Alles anzeigen


    Oder habe ich da jetzt was falsch verstanden?

    Habe das jetzt mal ausführlich ausgearbeitet. Ich hoffe, das hilft dir weiter!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von icqgamer ()