Sprite Änderung beim Springen (code hilfe)

  • GM 7

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

  • Sprite Änderung beim Springen (code hilfe)

    so, ich post hier mal meinen code den ich für springen verwend. er ist mit n paar eigenen variablen geschrieben, aber sollte verständlich sein

    problem ist, das ich keine sprite änderung bei rechts links springen hervorrufen kann und ich weiss nicht wie ichs einbaun soll.
    vielleicht kann mir einer helfen, ich bin kurz vorm verzweifeln.

    es handelt sich hierbei um ein 2D jump & run (falls die info notwendig ist)

    danke im vorraus für jede hilfe

    GML-Quellcode

    1. // process gravity
    2. if vert_speed >= 0 then // falling or standing
    3. {
    4. if place_free(x, y+1) then // no solid below so fall
    5. {
    6. if vert_speed > 0 then
    7. {
    8. move_contact_solid(270, abs(vert_speed)) ;
    9. if state != "hitting" then state = "falling" ;
    10. }
    11. // update vert_speed based on gravity
    12. vert_speed += my_gravity ;
    13. }
    14. else // solid below so stop falling
    15. {
    16. vert_speed = 0
    17. }
    18. }
    19. else // jumping
    20. {
    21. if place_free(x, y-1) then // can jump
    22. {
    23. move_contact_solid(90, abs(vert_speed)) ;
    24. vert_speed += my_gravity ;
    25. if state != "hitting" then state = "jumping" ;
    26. }
    27. else // bump head
    28. {
    29. vert_speed = 0 ;
    30. if state != "hitting" then state = "falling" ;
    31. }
    32. }
    Alles anzeigen


    hitting ist eine bewegung wo mein chara schlägt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Mephos ()

  • hi,
    ich hatte mal das gleiche problem.
    gelöst habe ich es mit einer weiteren globalvar: "richtung"
    wenn dein spieler nach links läuft setzt du sie z.B. auf 0, wenn er nach rechts läuft auf 1.

    dann fragst du beim springen die variable ab und setzt den entsprechenden sprite_index.

    (ich möchte es dir jetzt nicht alles vorkauen, ich denke du kriegst das hin ;) )

    Gruß
  • ich glaub der code schildert den falschen eindruck, den hab ich mit nem freund ausgearbeitet und versteh ihn sogar nur teilweise (also nicht selfmade)

    wir haben uns aus zig tutuorials in viel try and error das gebastelt, also wenn es dir nicht all zuviel arbeit macht hät ichs schon gern ein
    wenig genauer, ansonsten sitz ich wahrscheinlich an diesem scheiss problem noch n halbes jahr und verzweifel dann endlos ^^

    und ja, ich weiss das klingt ziemlich hilflos .. ich würd wirklich GML besser können um alles selbst zu machen ..
    es dauert nur leider glaub ich noch ein wenig :S
  • nagut, dann fangen wir mal ganz von vorne an.. ich schreib dir jetzt einfach den code hier rein (was ich eigentlich nich mag), und kommentiere ihn dir ein bisschen.
    das alles ins step event vom spieler

    GML-Quellcode

    1. //zuerst setzen wir die gravitation, folgendermaßen
    2. if place_free(x,y+1) // wenn der spieler keinen kontakt zu einem soliden objekt hat
    3. {gravity=0.5} // ist die gravitation 0.5, das heißt der spieler fällt
    4. else
    5. {gravity=0} // wenn der spieler aber kontakt zu einem objekt hat, ist die gravi 0, der spieler soll ja später nicht durch den boden fallen
    6. gravity_direction = 270; // das gibt die Richtung der Gravi an. 270 ist gerade nach unten
    7. if vspeed > 10 // hiermit limitieren wir noch die gravi auf eine bestimmte geschwindigkeit, damit der spieler nicht unendlich schnell wird.
    8. {vspeed=10}
    9. // nun zum springen
    10. if !place_free(x, y + 1) && keyboard_check_pressed(vk_space) // wenn der spieler kontakt zum boden hat ( das ausrufezeichen heist "not") und die leertaste gedrückt wird
    11. {
    12. vspeed -= 9; // veringern wir die vertikale geschwindigkeit.
    13. }
    Alles anzeigen



    So ich hoffe du liest es dir auch durch und kopierst es nicht nur.
    sollte es fragen geben, her damit ;)


    Gruß Terra
  • hmmmm.. das ist doch nur der code für "springen mit leertaste" ^^ oder irr ich mich da jetzt gewaltig xD

    also mein chara kann schon hervorragend springen, laufen (sprite änderung nach rechts links sogar) .. nur hat er n problem
    den sprite in der luft zu ändern (d.h links rechts springen)

    und evenso beim fallen (sprite beim fallen geht, aber nicht rechts links fallen)

    den code von dir hab ich ja verstanden, das was ich oben gepostet hab ist die grundform meiner bewegung wenns
    ums springen geht. ich brauch jetzt iiiiirgendwie ne lösung wie er den sprite ändert je nachdem in welche richtung er
    springt.

    das mit der global variable von dir hat sich schon gut angehört.. nur wie mach ich das?

    ^^

    sry, ich hoff ich hab mich nicht undeutlich ausgedrückt, oder was übersehen ^^

    und zudem wärs schön wenns mit " vk_up " geht und nicht mit leertaste, aber DAS kann ich zur not selbst umschreiben, soviel kann ich grad noch ^^
  • mach das folgendermaßen:
    zur theorie:
    Wenn dein spieler in der luft ist und sich auf der x achse nach rechts bewegt(springen rechts sprite)
    Wenn dein spieler in der luft ist und sich auf der x achse nach links bewegt(springen links sprite).
    Das ist eigentlich denkbar einfach.
    Du kannst es mit variablen lösen wie jetzt, oder du amchst das ganze im draw event. hier mal eine lösung im draw event weil ich nicht weiß wie du deine variablen so benutzt.

    GML-Quellcode

    1. if (place_free(x,y+1)//springt...
    2. {
    3. if (vspeed<0)// ...
    4. {
    5. if (hspeed>0)//und nach rechts geht...
    6. {
    7. draw_sprite_ext(sprite_index,0,x,y,1,1,0,noone,1)//zeichne das sprite !nicht! spiegelverkehrt(xscale1)
    8. }
    9. else//ansonsten
    10. {
    11. draw_sprite_ext(sprite_index,0,x,y,-1,1,0,noone,1)////zeichne das sprite spiegelverkehrt(xscale-1)
    12. }
    13. }
    14. }
    Alles anzeigen

    sry das der code so caotisch aussieht aber ich bekomm das mit dem einrücken hier bei gm-d nicht immer richtig hin.

    ich gehe hierbei davon aus dass dein spieler standartmäßig nach rechts schaut... ansonsten kannst du es ja selber ändern.
    hoffe ich konnte helfen
    mfg gamer_08
  • hm, ne, der code geht garnicht, da wird er erst garnicht gezeichnet. ich muss dazu sagen das ich über das draw event garnichts mach ^^

    ich hab im step event alle variablen wie folgt definiert

    GML-Quellcode

    1. // update the sprites based on the state
    2. if state = "standing" then sprite_index = spr_cide_front ;
    3. if state = "falling" then sprite_index = spr_cide_fall ;
    4. if state = "jumping" then sprite_index = spr_cide_jump ;
    5. if state = "walkingright" then sprite_index = spr_cide_right ;
    6. if state = "walkingleft" then sprite_index = spr_cide_left ;
    7. if state = "hitting" then sprite_index = spr_cide_hit ;
    8. if state = "kicking_right" then sprite_index = spr_cide_kick_right ;
    9. if state = "kicking_left" then sprite_index = spr_cide_kick_left ;
    10. if state = "push" then sprite_index = spr_push ;


    gibts nicht n einfachen befehl der sagt "image_xscale = -1" wenn du in der luft bist und nach links springst. den von natur aus springt er ja schon nach rechts (also gesicht nach rechts) und fallen tut er ja auch mit dem gesicht nach rechts. ich bräucht sozusagen nur ne lösung (obriger code im ersten post) wo er einfach wenn er links springt gespiegelt wird (oder alternativ halt das ich n 2. sprite abrufe wo er nach links zeigt)

    wie schon gesagt, ich arbeite ganz ohne draw event und hab das alles im step event stehen und einige variablen halt im create.

    mano ^^ weiss keiner rat? ich verzweifel ;( ^^
  • das tutorial ist echt gut, aber es hilft mir leider kaum bis garnicht weiter da hier die bewegungen ganz anders gemacht wurden wie bei mir.

    ich bräucht wirklich einfach nur ne kurze hilfe wie ich es ausdrücken kann das wenn er LINKS geht, alle images einfach umgedreht werden mit "image_xscale=-1" und dann aber auch wieder zurück gesetzt werden wenn er rechts geht.

    wenn er sich garnicht bewegt einfach "standing sprite" .. kann mir einer helfen?
  • Und hättest du dir meinen code genauer angesehen, wüsstest du jetzt wie man das macht.
    mithilfe von hspeed kannst du prüfen ob er sich nach rechts oder nach links bewegt. Die überprüfung ob er springt hast du ja schon.
    und per image_xscale kannst du es dann umdrehen, also wo ist das problem?
  • Benutzer online 2

    2 Besucher