Ball_Physik (ohne box2d physics)

    Ball_Physik (ohne box2d physics)

    Hallo Leute,

    1. Ja, cino ist schon sehr schlimm, aber er ist ja auch erst 12.

    > cino hatte mit den "Sekunden-Teleport" ja recht -> Move to Contact nervt mich auch etwas. (cino hätte das nie hinbekommen.)

    Ich habe mal sein Spiel als Grundlage genommen und die alte Spielphysik übern Haufen geworfen.
    (Ist aber immer noch fast alles Drag and Drop)

    Da ich selbst noch nicht viel Erfahrung mit Jump and Run habe, hatte ich mir gedacht nehmen wir das mal als Grundlage für ein paar Tests.

    Meine eigentliche Problematik ist aber eine halbwegs taugliche Ball-Physik zu realisieren.
    (Ich würde das auch gerne nur per Drag and Drop machen)

    Hier die benötige *.gmz - Datei:
    workupload.com/file/mmZGVbb

    (cino du kannst es dir ja auch mal downloaden, aber dein allgemeines Verhalten solltest du unbedingt verbessern.)
    __________________________________________________________________________________________________________
    ​AN ALLE MENSCHEN,
    DIE BEHAUPTEN, SIE
    WÜSSTEN, WIE DER
    HASE LÄUFT:

    ER HOPPELT!



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Weihnachtswichtel“ ()

    Neu

    Ich komm leider durchs coden nicht mehr mit DnD zurecht, aber das prinzip hinter einer realistischen Ballphysics, steckt in der Restitution des Balles, das ist die Menge an "Bounce" die der ball hat.
    Wenn die Restitution 1 ist, dann wird die geschwindigkeit des Balles komplett gespiegelt und wenn sie 0.5 ist dann wird die Hälfte "gespiegelt".
    Bei einer Kollsion mit dem Boden wird vspeed also vspeed*-restitution.

    Quellcode

    1. vspeed = 1 -> vspeed = -1; //restitution = 1
    2. vspeed = 1 -> vspeed = -0.3; //restitution = 0.3
    3. vspeed = 12 -> vspeed = -4; //restitution = 0.25


    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Neu

    Ähmm!!!

    vspeed = 1 -> vspeed = -1; //restitution = 1
    vspeed = 1 -> vspeed = -0.3; //restitution = 0.3 ??????
    vspeed = 12 -> vspeed = -4; //restitution = 0.25

    ​Das kann ich leider so nicht gebrauchen.
    (Das ist Außerdem für so ein Jump and Run und ein Ball Bounce (wie bei z.B. auch bei "blobby Volleyball") völlig falsch.)

    ​Ich mache die "Wiederherstellung des Balles" ja Dank GRAVITY mit FRICTION.

    So etwas wäre toll:
    real-world-physics-problems.com/bouncing-ball-physics.html ;)

    Ich probiere mich mal mit dem Physik-System vom Gamemaker, weil das rockt mehr.

    Ein Jump and Run mit Physik-System ist auch viel geiler.

    ​Aber trotzdem Danke!

    Neu

    Weihnachtswichtel schrieb:

    Ich probiere mich mal mit dem Physik-System vom Gamemaker, weil das rockt mehr.
    Du schreibst in deinen Titel "ohne Box2d", aber benutzt jetzt Box2d. So geht's auch.

    Was Aku geschrieben hatte, war schon ganz richtig. Es steht sogar in dem Link, den du geschickt hast:
    ​To properly account for the inelastic nature of real world bouncing ball physics problems, it is common to introduce a coefficient of restitution, which accounts for the loss of kinetic energy during each bounce.
    Für einen Jump & Run Charakter ist es dämlich, aber nicht für springende Bälle, genau das, was du ja haben wolltest.

    Neu

    Ok, bleiben wir erstmal bei "ohne box2D physics".

    Und wie müsste jetzt diese folgende Formel:

    vspeed = vspeed mal (negative)Restitution (Kehrwert)

    richtig umgesetzt werden.

    Außerdem wie könnte ich gescheit die Move Contact Probleme beheben.

    DEMO:
    workupload.com/file/nvLSNGn

    ........
    Korrekt (nach Beschreibung) müsste es ja so sein:

    Quellcode

    1. self.gravity = 1 //Anziehungskraft
    2. self.velocity = speed //Geschwindigkeit
    3. self.bounce = 0.9 //eigene Federung
    4. //step
    5. self.velocity += self.gravity //Beschleunigung bis zur Unkenntlichkeit
    6. //Bei Bodenkontakt
    7. self.velocity = -self.velocity * self.bounce

    Friction macht aber doch einen Slow-Down!!!

    Einen eigenen Bounce für den Ball könnte ich erstellen.
    (Ist aber doch wenig von Belangen.)

    the material of the ball influences how far it will bounce back


    ....
    Ich machs aber trotzdem mit Physics.
    ....
    Move_Contact ist trotzdem nervig.

    Danke!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Weihnachtswichtel“ ()

    Neu

    Was für Probleme hast du denn im move to contact? Im Prinzip sollte das nur dazu dienen, nicht in die objecte reinglitchen zu können.
    In Code kannst du das umgehen in dem du nicht die xy position bei einer kollision abfragst, sondern die xy+speed position.

    GML-Quellcode

    1. ///create
    2. grav = 0.9;
    3. vspd = 0;
    4. bounce = 0.7;
    5. ///step
    6. y += vspd;
    7. if collision_line(x,y,x,y+vspd, obj_boden, false, true){ //hier wird abgefragt ob im nächsten step (weil y+vspd die position des balls im nächsten step ist) der ball den boden berührt
    8. vspd *= -rest;
    9. }
    10. else{
    11. vspd += grav;
    12. }


    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)