3D-Figur springt erst beim zweiten Tastendruck

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

  • 3D-Figur springt erst beim zweiten Tastendruck

    Hallo Leute!
    Ich hab mich nach langer Zeit mal wieder in den 3D-Bereich gewagt.
    Nun habe ich folgende Probleme:

    Ich habe folgende Codes:

    Create:

    GML-Quellcode

    1. z=3
    2. fallen=false
    3. hoch=false
    4. hoehe=0
    5. springen=true


    Step:

    GML-Quellcode

    1. if !(z=3) && !(z=31) && (alarm[0]=0)
    2. {fallen=true}
    3. else if (z=3)
    4. {fallen=false;springen=true}
    5. if (x<114 or x>304)
    6. {fallen=true}
    7. if (x<288)&&(x>260)&&(z=31)
    8. {fallen=false;springen=true}
    9. else if !(x<288)or!(x>260)&&(z=31)
    10. {fallen=true}
    11. if (x<188)&&(x>160)&&(z=31)
    12. {fallen=false}
    13. else if !(x<188)or!(x>160)&&(z=31)
    14. {fallen=true}
    15. if (fallen=true)
    16. {z-=2}
    17. if (fallen=false)&&(z<3)
    18. {fallen=false;z=3}
    19. if (keyboard_check(vk_left))
    20. {x-=2}
    21. if (keyboard_check(vk_right))
    22. {x+=2}
    23. if (keyboard_check(vk_up)) && (springen=true)
    24. {
    25. fallen=false
    26. hoch=true
    27. alarm[0]=0.81875
    28. }
    29. else if (fallen=true)
    30. {alarm[0]=0;hoch=false}
    31. if (keyboard_check(vk_down)) && (z=31)
    32. {z-=2;fallen=true}
    Alles anzeigen


    Alarm[0]:

    GML-Quellcode

    1. if (hoch=true)
    2. {
    3. springen=false
    4. fallen=false
    5. z+=2
    6. hoehe+=1
    7. alarm[0]=0.81875
    8. if (hoehe=15)
    9. {
    10. hoch=false
    11. alarm[0]=0.81875
    12. }
    13. }
    14. else if (hoch=false)
    15. {
    16. hoehe=0
    17. fallen=true
    18. }
    Alles anzeigen


    Draw:

    GML-Quellcode

    1. d3d_draw_block(x-5,y-5,z,x+5,y+5,z+10,background_get_texture(bg_player),1,1)



    1.Problem: Meines Wissens müsste die Figur jetzt normal springen und laufen können, aber wenn ich jetzt nach oben (springen) drücke bewegt die Figur sich ganz kurz und bleibt dann wieder auf dem Boden stehen. Aber wenn ich dann nochmal auf die Pfeiltaste oben drücke springt er (d.h. erst beim zweiten mal). Dann fängt das gleiche wieder an.

    2.Problem: Es gibt zwei Plattformen in der Luft, auf die man springen kann. Es funktioniert auch, darauf zu springen und auch stehen zu bleiben, aber die zweite Plattform ist komischerweise höher, obwohl das die gleichen Objecte sind.

    Für alle die das "live" sehen wollen, hab ich das nochmal im Dateianhang.
    Dateien
    • Example.rar

      (44,7 kB, 182 mal heruntergeladen, zuletzt: )
  • Hallo

    Ich hab mir dein Example mal angesehen.
    Da ich die Rutine nicht analysiert bekommn habe... , habe ich das ganze mal schön dokumentiert neugeschrieben, wie ichs machen würde.

    Ich hoff es hilft dir weiter :)
    ===========================================================

    Änderungen betreffen nur das obj_player

    Also ersma hab ich den Alarm ganz wech gelassen.

    Create Event

    GML-Quellcode

    1. z = 3; // Höhe des Objekts
    2. fallen = false; // Ob der Player runter fällt
    3. hoch = false; // Ob der Player rauf oder runter geht
    4. springen = true; // Ob der Player gerade springend ist
    5. grav_speed = 2; // Wie schnell der Player springt


    Step Event

    GML-Quellcode

    1. // Checke, ob Objekt nicht auf Platform ist oder drunter
    2. if (!collision_point(x,y,obj_plattform,1,1) and z = 3) or z < 3
    3. {
    4. // Player soll fallen
    5. z -= grav_speed;
    6. }
    7. // Checken ob Player grade hoch springt
    8. if springen and hoch
    9. {
    10. z += grav_speed;
    11. // Checken ob Player oben angekommen
    12. if z >= 31
    13. {
    14. // Player soll runter kommen
    15. hoch = false;
    16. }
    17. }
    18. // Checken ob Player grade gesprungen ist und jetzt runter kommt
    19. if springen and !hoch
    20. {
    21. z -= grav_speed;
    22. // Schauen ob Player wieder auf dem Grunde ist
    23. if z <= 3
    24. {
    25. // Player soll wieder stehen
    26. springen = false;
    27. z = 3;
    28. }
    29. }
    30. // Checken ob Player auf Erhöhung ist
    31. if collision_point(x,y,obj_erhoeung,1,1) and z >= 29 and z <= 33
    32. {
    33. // Player soll oben bleiben
    34. z = 31;
    35. }
    36. // Checke ob Player springt
    37. if keyboard_check_direct(vk_up) and !springen
    38. {
    39. // Der Player soll springen
    40. springen = true;
    41. // Der Player soll raufspringen
    42. hoch = true;
    43. }
    44. // Checke Bewegung nach Rechts
    45. if keyboard_check_direct(vk_right)
    46. {
    47. // Bewegung nach Rechts vollführen
    48. x += 2;
    49. }
    50. // Checke Bewegung nach Links
    51. if keyboard_check_direct(vk_left)
    52. {
    53. // Bewegung nach Links vollführen
    54. x -= 2;
    55. }
    Alles anzeigen


    Achtung! Wenn du grav_speed über 2 definierst, musst du die z abfragen bei der Kollision mit dem obj_erhoeung ändern.

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

  • Erstmal vielen Dank!!! Alles funktioniert perfekt!!!
    ...
    ...
    ...
    Außer......, dass man wenn man auf der Erhöung steht, nicht mehr springen kann (ich weiß glaub ich auch, woran das liegt <-Step: Z.35-39). Eigentlich hatte ich das schon, aber hab wohl vergessen es zu speichern. Aber wenn ich versuche irgendeine Lösung dafür zu finden, scheitere ich leider. ?( (Hab ziemlich viel ausprobiert, nichts hat funktioniert)

    Kann mir da noch jemand helfen :?: :?: :?:
  • Benutzer online 2

    2 Besucher