Jump Animation in abhängigkeit von der Höhe

  • GM 8

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

  • Jump Animation in abhängigkeit von der Höhe

    Hey Leute,

    ich hab mal wieder ein kleine Problem bei dem ich nicht weiterkomme
    komischerweiße hab ich kein Thema gefunden das auf mein Problem zugeschnitten ist,
    Also hier mein Problem :rolleyes:


    ich habe eine recht aufwenige Charakteranimation gemacht.... :thumbsup:
    Bei dem Game handelt es sich um ein 2D side scroll game ^^

    Also es geht darum das ich eine Sprunganimation habe die ca 60 sprites umfasst
    bei den ersten 20 geht er in die hocke und macht sich zum Sprung bereit bei den nächsten 20 ist er sozusagen in der Luft und bei den letzten 20 landet er

    Nun ist meine Frage, wisst ihr eine Möglichkeit wie man es so deichseln kann das er die einzelnen Bilder in abhängigkeit der Höhe zum Boden abspielt, also wenn er ihrgendwo höheres runterspringt das dann die Fluganimation langsamer bzw halt länger angezeigt werden. und die Animation dann flüssig auf dem Boden landet? ich hab schon den ganzen Tag rumprobiert aber es hat nie geklappt,... vielleicht gibts hier ja klügere Köpfe als mich :P

    Ich habs nicht hingekriegt die derzeitige höhe vom Spieler bzw sein maximum zu berechnen...

    Wenn ihr ne Idee habt, nur heraus damit, würde mich freuen =)
  • jo klar ich bin ja kein blutiger anfänger mehr :P

    Allerdings weis ich nicht wie ich den abstand zum Boden berechnen soll... und dann davon noch in abhängigkeit meine Sprites anzeigen...


    Muss da mit Parabeln, Wurfweiten.... rechenen oder wie kan man das am besten lösen?

    Ich hab mal ne Datei hochgeladen, vielleicht wirds dann verständlicher

    dort sind 3 Sprünge gezeichnet die unterschiedlich lang dauern....
    Bilder
    • jump.png

      3,65 kB, 287×322, 119 mal angesehen

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

  • Also das ist in der Tat ein schwieriges Problem.
    Ein Möglichkeit die mir einfallen würde, wäre es dieses Skript zu benutzen:
    gmlscripts.com/script/range_finder

    Wenn du als dir 270 einsetzst, dann wird es dir den Abstand zum Boden unter dir berechnen.

    Das gibt es allerdings ein Problem.. Was wenn der Spieler bereits am Fallen ist, er sich aber noch über einer Platform befindet, dann aber während dem parabolischen Fallen, doch noch die Platform verpasst und dann plötzlich über dem Grund ist? Dann würde der Abstand auf einmal von niedrig auf hoch springen. Diesen Sonderfall musst du beachtenw enn es wirklich sauber werden soll.


    EDIT: Dein Bild bringt das nochmals ein wenig durcheinander :D denn der Besagte Sonderfall kommt da ja deutlich häufiger vor. Das ganze ist sehr schwer zu lösen.
    Frage mich aber grad was für einen Platforme kennst du der dies berücksichtigt? Viele benutzen einfach stehende sprites beim fallen und fangen mit der Lauf/Lande- Bewegung schlicht bei Bdoenkontakt wieder an.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

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

  • Sind 60 Sprites für nur die Jump Animation nicht etwas weit übertrieben? Ich weiß zwar nicht was für Kunstücke dein Player in der Luft noch alles so vollbringt aber normalerweise reichen 3-4 stück. Einen oder zwei für die Hocke, 1-2 für die in der Luft animation und halt wieder einen für die Landung wobei man da auch die Anfangssprites nehmen kann wo er sich hockt.

    Ansonsten, wie wärs wenn dein Spieler den Boden berührt, dann einfach automatisch in den Landungssprite wechselt? Weiß nur nicht ob das dann noch Gut aussieht bei deiner Animation.
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.
  • Das Problem ist folgendes:
    Was machst du wenn du auf einer Plattform springen willst? Das würde bedeuten deine Animation würde frühzeitig beendet und läuft halt weiter ob wohl du schon auf der Plattform stehst (je nach dem).
    Du müsstest ja theoretisch wissen wo der Spring hin geht. Also das schon vorher berechnen lassen.

    Alles andere ist eigentlich einfach. Den image_index halt als counter laufen lassen. Wie man halt grad lustig ist.

    Hab schon das ein oder andere Feierabendbier drin, also erwarte jetzt nicht zu viel von mir. ^^
    Aber, ich meine doch, dass es wichtig sei. Den Start- und End-Punkt der Stecke zu kennen.
    Dann wäre es ein Leichtes die Frames animieren zu lassen.

    Du kannst ja vorher ein Dummy Springen lassen.
    Zum Beispiel in der Zeit wo du den Sprung vorbereitest.

    Tipp am Rande:
    Teile dein Sprite auf.
    - Sprung vorbereitung
    - Sprung
    - Landung
    Bilder
    • beispiel.jpg

      20,17 kB, 633×619, 115 mal angesehen
  • @DAGdev
    Naja in 90% der mir bekannten Jump-Spielen kann man in der Luft noch die Richtung mit den Steuerungstasten ändern (auch wenn dies höchst irrational und unlogisch ist.. und erinnert stark an den Lügenbaron und sein Pferd :D ).
    Von daher ist "simulieren" nicht wirklich eine Option :/

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • ok, aber ich würde es ja auch nicht unbedingt auf eine Abfrage vor dem Sprung beschränken.
    Du kannst in jeden Step die Flugbahn bzw. Springziel berechnen und anhand der distance die frames dementsprechend abspielen lassen.
    Vielleicht probier ich das mal am Wochenende. So ne 2D Figur ist nicht ganz einfach. Die müsste halt wie ne 3D Figur geriggt sein.
    Kannst ja mal gucken wie andere 2D Games das machen. Ich glaub aber, dass es sooooo präzise wie du das möchtest nicht geht. Zumindest nicht mit vorgefertigten sprites.
    Aber das muss es doch auch nicht, oder?

    1. Du gehst in die Hocke (0-20 Bilder).
    2. Du Springst (21-40 Bilder) bis du den maximal Punkt erreicht hast.
    3. Bei der Landung machst einfach ne kleine Fall Animation. Ein leicht animiertes "Standbild" mit einer Fall bzw. Lande pose.
    Dann ist es egal, wann er landet. Sobald er den Boden erreicht, machst da auch noch ne Animation draus wie er sich langsam wieder fängt bzw. den sprung abfängt und sich aufrappelt für weiteres gehn.
    etc
    etc

    ich würd mich da erstmal garnicht so aufhalten.
    Grüßle
    DAG
  • Hi
    Was du brauchst ist eigentlich nur der extremwert deiner kurve sowie start und landepunkt.
    ich würde aber nicht die kurve an sich berechnen, sondern einfach folgende steps nach dem springen "vorraussagen".
    ich würde ein objekt was die selbe collisionsmask wie dein spieler hat (oder wie auch immer du kollisionen berechnest... wenns nur ein punkt is noch besser)
    erstellen und dann mit sowas in der art extrempunkt und landepunkt ausrechnen:

    GML-Quellcode

    1. dummyObject = instance_create(obj_dummy);
    2. dummyObject.x = x;
    3. dummyObject.y = y;
    4. lasty = dummyObject.y;
    5. while (dummyObject.collisionWithWallObject == false) {
    6. dummyObject.x += hspeed;
    7. dummyObject.y += vspeed;
    8. vspeed += gravity;
    9. if (lasty <= dummyObject.y)
    10. lasty = dummyObject.y;
    11. }
    Alles anzeigen

    (für "collisionWithWallObject" einfach deinen eigenen kollisionsmechanismus einfügen)

    nach ablauf dieses codes hat man folgende y-werte (welche in beständigeren variablen abgespeichert werden sollten):
    lasty: extrempunkt
    dummyObject.y: landepunkt
    y: startpunkt

    dann unterteilst du deine animation in:
    A - bilder bei denen der charakter sich für den sprung bereit macht (diese kannst du ja einfach abspielen bevor er springt)
    B - bilder der animation bis zum höchsten punkt
    C - bilder des fallens bis er wieder am boden angelangt ist
    D - bilder bei denen er nach dem aufkommen noch irgendwas macht (diese ggf einfach danach abspielen)

    wichtig für uns sind dabei nur B und C
    mit denen verfährst du während dem eigentlichen sprung wie folgt:
    einzelbildVonB = ((y / extrempunkt) - startpunkt) * B.AnzahlBilder;

    für c ist es das selbe du musst nur eventuell
    (1 - (...)) * C.AnzahlBilder;
    machen, falls die animation falschrum ist
    (und warscheinlich musst du die resultierenden einzelbild werte runden runden)

    ------
    das hier war jetzt alles mehr pseudocode, aber ich hoffe das prinzip ist einigermaßen gut rübergekommen
    das ist einfach eine lineare interpolation bis zum extrempunkt der kurve und dann bis zum landepunkt
    Bilder
    • jump.png

      3,37 kB, 368×136, 123 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von florpp ()