Gravitytions Probleme



  • Ich arbeite gerade an einem 2D Plattform und habe seit kurzem folgendes Problem:
    immer wenn der Spieler auf einer Schrägen Linie steht, rutscht er ganz langsam den Hang hinunter. Was daran liegt, dass wenn die Kollisionsabfrage startet, der Spieler erst in den Boden sinkt und dann etwas weiter Richtung Senkung wieder auf die Plattform gehoben wird. Hat jemand eine Idee wie ich diese Bewegung am besten vermeiden kann?



  • Da ich mal n gespielt habe finde ich das völlig in Ordnung so.
    Abgesehen davon ist die offensichtliche Lösung, dass das Sinken und Heben nur vertikal und nicht horizontal passieren sollte.



  • ok, danke, denk mal drüber nach



  • Ich hatte dieses Problem bei mir auch mal. Meine Lösung: Reibungsvektor berechnen und somit das Rutschen vermeiden.



  • ok, kanns du mir nen link dazu geben?



  • Es gibt kein Link. Das habe ich mir selber ausgedacht.

    Hier mein Algorithmus:

    http://img705.imageshack.us/img705/9948/unbenannthpz.png

    Betrachtet wird EINER deiner Eckpunkte von deiner Figur. Sie befindet sich momentan am oberen grünen Kreis. Es wirkt nur die Schwerkraft (Grauer Vektor), also will der Eckpunkt zum unteren grünen Kreis wandern. Die Kollisionsabfrage ermittelt, dass es beim Weg von Kreis Oben zu Kreis Unten eine Kollision geben wird, die Abfrage gibt den Normalenvektor (Rot) der Wand zurück.

    Der Bewegungsvektor (Grauer Vektor) wird auf den Normalenvektor (Rot) Projeziert. Der Projezierte Vektor wird auf den grauen Vektor addiert, dadurch erhalte ich den Hangabtriebsvektor (Lila). Nun will der obere Grüne punkt also nicht mehr geradewegs nach unten sondern von oberen Kreis in Richtung des Hangabtriebsvektor wandern. Der Reibungsvektor (Blau) wirkt immer entgegen den Bewegungsvektor (Welcher hier also lila ist).

    Wenn der Reibungsvektor länger ist als der Bewegungsvektor(Lila), dann Subtrahiere vom Lilanen Vektor einfach nur den blauen ab und berechne nun die neue Position durch: Oberer Kreis + Lila - Blau

    Wenn der Blaue Vektor >= Lila Vektor ist, dann kürze den blauen Vektor auf die Länge des Lila Vektor. Die Berechnung von
    Oberer Kreis + Lila - Blau ergibt dann Oberer Kreis, da Lila-Länge = Blaue-Länge.

    Ich mach also alles über Vektorberechnungen.

    War das verständlich 😃



  • ok, danke ich denke das wäre die sinnvollste Lösung, ich hab auch drüber nachgedacht.

    Ich bin aber in der Zwischenzeit auf folgendes Gekommen:

    jeder Körper (Gegner, Spieler , etc) hat eine Standlinie, also die Oberfläche auf der er steht. diese wird von der Kollisionsabfrage ermittelt. also sobald eine Kollision mit einer Linie aufgelöst wird, wird diese Linie auch dem Körper hinterlegt.
    Die Gravitation prüft dann, ob diese Linie ein Gewisses Gefälle hat. wenn sie also unter 45 Grad liegt, dann wirkt keine Gravitation. Ausserdem lässt sich durch dieses System auch feststellen, ob der Spieler auf Boden steht der einen Sprung erlaubt, das der Spieler einen Hang hinauf oder hinunter läuft, ohne an Tempo zu verlieren oder vom Boden abzuheben und vermutlich noch einges mehr.

    Ich werde mal versuchen dieses System umzusetzten und falls es nicht funktionieren sollte, werde ich auf deine Technik zurückkommen. Danke Trozdem.
    Alle Wege führen nach Rom.

    Schönes Wochenende



  • Ok, mein System hat auf ganzer Linie versag, ich probiers mal mit deinem.
    Ich schreib das nur, damit niemand auf die Idee kommt mein System zu übernehmen.



  • Einfach immer wenn es nicht extrem kompliziert ist an die gewöhnliche Newtonmechanik halten und es WIRD funktionieren



  • Einfach nicht in den Boden sinken und schon kann nix mehr passieren?



  • alterbro schrieb:

    Ok, mein System hat auf ganzer Linie versag, ich probiers mal mit deinem.
    Ich schreib das nur, damit niemand auf die Idee kommt mein System zu übernehmen.

    Ich wette, du hast etwas falsch gemacht.


Anmelden zum Antworten