Platform Code

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

  • Platform Code

    Hallo, ich mal wieder mit einer Frage :D

    ich hab leider nicht so viel Ahnung von Platform-Games allgemein (bzw. eigne sie mir mit der Zeit an), hab also folgenden Code geschrieben:
    [ Step Event ]

    GML-Quellcode

    1. if (!keyboard_check(vk_up) and vspeed<0) {vspeed *= 0.9;}
    2. if (keyboard_check(vk_left)) {hspeed -= 0.2;}
    3. if (keyboard_check(vk_right)) {hspeed += 0.2;}
    4. if !(keyboard_check(vk_left) xor keyboard_check(vk_right))
    5. {hspeed *= 0.9;} else {
    6. if (keyboard_check(vk_left) and hspeed>0) {hspeed *= 0.9;}
    7. if (keyboard_check(vk_right) and hspeed<0) {hspeed *= 0.9;}
    8. }
    9. hspeed = max(-4,min(4,hspeed));
    10. if (on_ground() and keyboard_check_pressed(vk_up)) {vspeed = -5.5;}
    11. if (on_ground()) {
    12. gravity = 0;
    13. if (vspeed > 0) {
    14. move_contact_solid(270,vspeed);
    15. vspeed = 0;
    16. }
    17. } else {gravity = 0.2;}
    18. if (place_meeting(x+hspeed,y+vspeed,objBlock) and hspeed!=0) {
    19. if (hspeed > 0) {dir = 0;} else {dir = 180;}
    20. move_contact_solid(dir,abs(hspeed));
    21. hspeed = 0;
    22. }
    23. if (place_meeting(x+hspeed,y+vspeed-1,objBlock) and vspeed<0) {
    24. move_contact_solid(90,min(0,-vspeed));
    25. vspeed = max(0,vspeed);
    26. }
    Alles anzeigen
    (Btw: Der Script on_ground() ist nichts anderes als place_meeting(x,y+vspeed+0.8,objBlock);)

    Ich bin eigentlich sehr zufrieden mit dem Ganzen, nur wenn man mit Geschick seitlich von oben an einen Block geht, hängt man fest und kann sich nur noch befreien, indem man springt. Hier ist ein Bildchen, wo man es gut erkennen kann:


    Kennt jemand eine bessere Methode oder findet jemand den Fehler in meinem Code?

    Danke im Voraus, ;)
    Gruß, euer kopierjunge
  • Wenn das mal nicht ironisch ist... ich werde auf meine eigene Engine verwiesen :D
    Naja, das wäre trotzdem einen Versuch wert...
    Aber auch da gibt's einen ganz fiesen Bug, der kommt zwar nicht so oft vor ist dafür aber viel schlimmer 8| (Glaub ich zumindest xD)
    (Mask: nein, aber precise collision checking ist aus :) )

    Edit: Wenn jemand trotzdem was besseres kennt, her damit!

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

  • Hast du den Block auf Solid gestellt?

    Habe mir das ganze mal angeguckt und aus deinem Fehler bild die sprites rausgemacht.
    Deswegen habe ich ein bisschen rumgewummelt damit, und bemerkt das dieser Fehler (zumindest bei mir) nur kommt, wenn ich den Block nicht auf Solid stelle. Den ball hab ich auch net auf solid.

    MFG
    Metalknight
  • Ja der Block ist solid. :pinch:

    Edit: Hab's jetzt doch geschafft :D

    GML-Quellcode

    1. acc = 0.3;
    2. fric = 0.1;
    3. jump = 5.5;
    4. if (keyboard_check(vk_left)) {hspd -= acc;}
    5. if (keyboard_check(vk_right)) {hspd += acc;}
    6. if !(keyboard_check(vk_left) xor keyboard_check(vk_right))
    7. {hspd *= 0.9;} else {
    8. if (keyboard_check(vk_left) and hspd>0) {hspd *= 1-fric;}
    9. if (keyboard_check(vk_right) and hspd<0) {hspd *= 1-fric;}
    10. }
    11. hspd = max(-4,min(4,hspd));
    12. if (!keyboard_check(vk_up) and vspd<0) {vspd *= 1-fric;}
    13. if (on_ground() and keyboard_check_pressed(vk_up)) {vspd = -jump;}
    14. if (on_ground()) {
    15. grav = 0;
    16. if (vspd > 0) {
    17. move_contact_solid(270,vspd);
    18. vspd = 0;
    19. }
    20. } else {grav = 0.2;}
    21. vspd += grav;
    22. vspd = min(10,vspd);
    23. if (hspd >= 0) {dir = 0;} else {dir = 180;}
    24. if (hspd != 0) {move_contact_solid(dir,abs(hspd));}
    25. if (vspd >= 0) {dir = 270;} else {dir = 90;}
    26. if (vspd != 0) {move_contact_solid(dir,abs(vspd));}
    27. if (place_meeting(x+sign(hspd),y,objBlock)) {hspd = 0;}
    28. if (place_meeting(x,y-1,objBlock)) {vspd = max(0,vspd);}
    Alles anzeigen

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

  • Benutzer online 1

    1 Besucher