Ragdoll engine

  • GM 8

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

  • Ragdoll engine

    Hallo leude ich mach grad ne engine für mein Spiel und hänge da grade fest.
    Ich wollte ein 2d top down ragdoll machen, damit ich nicht für jede bewegung ein anderen sprite für jedes kostüm machen will -.-
    Daher wollte ich dann nen ragdoll von oben machen, wo Beine seine textur langziehen sollen wenn er geht, ich weiss wies geht, aber ich wollte es noch mit den armen machen, also das die waffe sagt "hier mit hand nehmen. Das weiss ich auch schon, wies geht, aber meine arme spinnen herum wenn ich es starte und manches funzt net so gut :/

    Aber ich habe mal ne skizze gemalt:

    Die Blauen Punkte sind das zentrum der objekte. Also bei der Linken Schulter sollte es zuerst zum zentrum gehen, die selbe direction haben und dann -90° machen und eine geschwindigkeit von 16 haben, somit es in ein step am rand ist. Aber leider geht es nur bei mir mit 2 steps, weil es ja zeit braucht um hinzukommen und dann ja den speed wieder auf 0 zu setzen. dann soll der image_angle von seinen punkt aus zum linken Ellenbogen gehen. Das geht ja auch. :D Dann soll der linke ellenbogen den maximalabstand zur schulter haben und zwar 20. Somit machte ich , dass er zur schulter mit direction guckt und speed=LEl.dirsh(das sind 20)-point_distance(LEl.x,LEl.y,LSh.x,LSh.y).<-- Das macht er während die variable step=1 ist. Dann kommt step 2 und habe ihn dann zur hand die direction gucken lassen und speed=LEl.dirha(das sind 20)-point_distance(LEl.x,LEl.y,LHa.x,LHa.y) gemacht. Somit sollte es jeden step in der reichweite bleiben. Zum schlusshabe habe ich mit Left hand gemacht, dass es nicht ausser reichweite kommt also hingucken lassen und LHa.dirsh(das sind LEl.dirsh+LEl.dirha also 40)-point_distance(LSh.x,LSh.y,LHa.x,LHa.y)
    Dann habe ich die Arme einfach zu ihren Punkten gesetzt und sie zum nächsten objekt gucken lassen(gestrichelt).

    ALLES WIRD VON OBJ_BODY GESTEUERT UND IN DEN ANDEREN OBJEKTEN IST NICHTS AUSSER DEN SPRITE
    Also so sollte es ja auch sein.

    obj_body:
    :event_create:

    GML-Quellcode

    1. LSh=instance_create(x-16,y,obj_ball)
    2. LA1=instance_create(x-15,y-6,obj_arm)
    3. LEl=instance_create(x-10,y-20,obj_ball)
    4. LA2=instance_create(x-6,y-23,obj_arm)
    5. LHa=instance_create(x-4,y-25,obj_ball)
    6. LHago=instance_create(x-4,y-25,obj_ball) // Spielt gerade garncihtsn und wird nirgens verwendet.
    7. LEl.dirsh=20 // max distance vom (El)lenbogen zur (sh)ulter
    8. LEl.dirha=20 // max distance vom (El)lenbogen zur (Ha)nd
    9. step=0
    Alles anzeigen

    :event_step:

    GML-Quellcode

    1. image_angle=point_direction(x,y,mouse_x,mouse_y)
    2. direction=image_angle
    3. LHa.dirsh=LEl.dirsh+LEl.dirha // max distance von der summe von den beiden über, somit die hand nich einfach ab fällt.
    4. LSh.x=self.x //standartposition bei jeden step
    5. LSh.y=self.y //standartposition bei jeden step
    6. LSh.image_angle=point_direction(LSh.x,LSh.y,LEl.x,LEl.y)// Schulter soll von Shulter zum Ellenbogen gucken
    7. LSh.direction=self.direction-90 //dreht sich und sich zum rand zu bewegen
    8. if step==1 then // !!! 1.Problem !!!
    9. {LSh.speed=16}
    10. if step==2 then
    11. {LSh.speed=0}
    12. LEl.image_angle=point_direction(LEl.x,LEl.y,LHa.x,LHa.y) // !!! 2.Problem !!!
    13. if step==1 then
    14. {LEl.direction=point_direction(LEl.x,LEl.y,LHa.x,LHa.y) //Ellbogen dreht zur hand
    15. LEl.speed=LEl.dirha-point_distance(LEl.x,LEl.y,LHa.x,LHa.y)} //Ellbogen speed zur hand
    16. if step==2 then
    17. {LEl.direction=point_direction(LEl.x,LEl.y,LSh.x,LSh.y) // Ellbogen dreht zur schulter
    18. LEl.speed=LEl.dirsh-point_distance(LEl.x,LEl.y,LSh.x,LSh.y)} //Ellbogen speed zur schulter
    19. LHa.image_angle=point_direction(LEl.x,LEl.y,LHa.x,LHa.y)
    20. LHa.direction=point_direction(LHa.x,LHa.y,LSh.x,LSh.y)
    21. LHa.speed=LHa.dirsh-point_distance(LSh.x,LSh.y,LHa.x,LHa.y) //Hand hält maximalen abstand ein.
    22. LA1.x=LSh.x //Klappt schon
    23. LA1.y=LSh.y
    24. LA1.image_angle=point_direction(LSh.x,LSh.y,LEl.x,LEl.y)
    25. LA1.direction=image_angle
    26. LA2.x=LEl.x //Klappt schon
    27. LA2.y=LEl.y
    28. LA2.image_angle=point_direction(LEl.x,LEl.y,LHa.x,LHa.y)
    29. LA2.direction=image_angle
    30. step+=1 // Timer
    31. if step==3 then
    32. step=1
    Alles anzeigen


    1.Problem: Immer jeder 2. step ist es bei seinen punkt angelangt und nicht gleich am ersten,gerade macht es immer so ein flackern.
    2.Problem: Irgendwie läuft der Linke Ellenbogen sich weg und geht ausserhalb des Bildschirms.

    Ich hab ne gmk hochgeladen und euch den code zu geben:

    +/-= geschwidnigkeit ändern
    am anfang ist es auf 1 um es euch zu zeigen

    P.S: Sorry für die scheiss Grammatik oder wenn ihr es nicht versteht. Kann net so gut erklären.

    EDIT: Oops vergessen gmk hochzuladen

    EDIT2: OK IST DAS EINE SACHE FÜR DIE EXPERTENRUNDE? BITTE UM ANTWORT
    Dateien

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