Komplexe Kollision

  • GM 7
  • Komplexe Kollision

    Ich stehe seit Stunden voll auf dem Schlauch. Folgende Situation:

    Spieler kann sich in alle Richtungen bewegen, quasi fliegen. Durch Gravitation kommt er wieder auf den Boden. Objekt bewegt sich stur nach rechts, bei Kollision mit anderen Objekten im Level dreht es die Richtung um. So weit so gut.

    1.) Wenn der Spieler von oben auf das Objekt kommt, soll vspeed=0 sein und hspeed sich dem Objekt anpassen. Es soll also mitwandern.
    2.) Wenn der Spieler das Objekt von unten oder von der entgegengesetzten Laufrichtung des Objektes berührt, soll es leicht abprallen, Objekt bewegt sich in die vorgegebene Richtung weiter.
    3.) Wenn Spieler mit dem Objekt entgegengesetzt kollidiert, also so: -><- dann soll das Objekt den Spieler einfach verschieben. Der Spieler muss aber mit drücken von "hoch" sich befreien können.

    Mein Code beim Spieler bei einer Kollision sieht so aus:

    GML-Quellcode

    1. if (Ball.vspeed>0)
    2. {
    3. move_contact_solid(270,4)
    4. vspeed=0
    5. hspeed=Plattform-H.hspeed
    6. }
    7. else
    8. {
    9. move_bounce_solid(1)
    10. }


    Zwei Dinge funktionieren nicht. Die Sache mit der -><- Kollision und die Tatsache, dass der Spieler nicht mitwandert, wenn er von oben auf das Objekt kommt.
  • RE: Komplexe Kollision

    Yamm schrieb:


    GML-Quellcode

    1. if (Ball.vspeed>0)
    2. {
    3. move_contact_solid(270,4)
    4. vspeed=0
    5. hspeed=Plattform-H.hspeed
    6. }
    7. else
    8. {
    9. move_bounce_solid(1)
    10. }



    Ich verstehe zwar nicht ganz was du willst, aber ich glaube ich habe den Fehler entdeckt:

    GML-Quellcode

    1. if(vspeed>0)
    2. {
    3. move_contact_solid(270,4);
    4. vspeed=0 ;
    5. hspeed=other.hspeed;
    6. }
    7. else
    8. {
    9. move_bounce_solid(1);
    10. }


    Wenn du nämlich den Objektnamen verwendest, wird das auf die erste Instanz des Objektes bezogen. Bei "other" wird die Instanz genommen, mit der die ausführende Instanz kollidiert.

    © 2008 by Teamgrill Productions
  • Du musst wahrscheinlich noch bei der Kollision die gravity auf 0 setzen. Ansonsten wird der vspeed ja im nächsten step wieder != 0.
    So müsste es also klappen:

    GML-Quellcode

    1. if (vspeed>0)
    2. {
    3. move_contact_solid(270,4)
    4. vspeed = 0;
    5. gravity = 0;
    6. hspeed=other.hspeed
    7. }
    8. else
    9. {
    10. move_bounce_solid(1);
    11. }
    Alles anzeigen


    und im step-event:

    GML-Quellcode

    1. if place_empty(x+sprite_width/2,y+sprite_width/2+1)
    2. gravity = ?;

    "Is this one sloshing?"
    Four words you don't want to hear when you pick up a coffin...
  • Benutzer online 2

    2 Besucher