[DirectX] Physikalisch Richtige Bewegung



  • Hallo,
    ich hab momentan ein Problem mit der Bewegung, und zwar soll sich mein Raumschiff (im Weltraum) so bewegen, wie es physikalisch (fast ganz) richtig ist:

    - Drehen ist immer möglich ohne Änderung der Geschwindigkeit, oder der Bewegungsrichtung (ist einfach, ist schon geschafft)

    - Wenn ich mich nun in eine andere Richtung drehe, und dann beschleunige, will ich, dass das Schiff eine Kurve in diese Richtung macht (wie ein Boot im Wasser)

    Meine Idee:

    float AlteRotation;
    float NeueRotation;
    float RotationDiff;
    
    RotationDiff = AlteRotation - NeueRotation;
    RotationDiff /= 100;
    NeueRotation = AlteRotation + RotationDiff;
    

    So löse ich zwar teilweise das Problem mit der Bewegung (eigentlich sollte das ganze eher quadratischer verlaufen), aber wie kann ich nun die "neue Geschwindigkeit" ausrechnen?

    mfg



  • die geschwindigkeit ändert sich dabei einfach nicht sofort, sondern stückweise.

    wenn das schiff vorher eindimensional der x achse gefolgt ist, dann reduzier die geschwindigkeit der x achse stückweise, während du die geschwindigkeit entlang der y achse im gleichen maße erhöhst.

    so kommt deine natürliche kurve raus. die geschwindigkeitsreduzierung / -erhöhung richtest du eben nach winkel aus. wenn du's physikalisch genau haben willst und ein gewisses grundkenntnis der klassischen mechanik hast, informier dich mal über den impuls.



  • Ja, so wäre das ja kein Problem, aber wie mache ich das dann, wenn das Schiff nicht genau in die X Achse zeigt, sondern irgendwohin anders?



  • Wenn du das ganz klassisch mit Mechanik implementierst (Geschw., Beschleunigung etc.) dann bekommst du diese "Trägheit" von alleine.

    @TravisG: Wo spielt bei seinem Problem denn der Impuls eine Rolle?



  • Aja, bevor ichs vergesse: Es ist ein 2D Spiel, nicht 3D



  • Du hast einfach einen Geschwindigkeits- (=Bewegungs-) vektor, der in irgendeine Richtung zeigt, wohin sich das Raumschiff eben bewegt. Und wenn du dein Raumschiff drehst und Schub gibst, hast du einen Beschleunigungsvektor in diese Richtung.

    Es handelt sich um die ganz einfache Gleichung v = v0 + a * t, wobei v dein resultierender Geschwindigkeitsvektor, v0 der ursprüngliche Geschwindigkeitsvektor, a der Beschleunigungsvektor und t die Zeit ist.



  • this->that schrieb:

    Wenn du das ganz klassisch mit Mechanik implementierst (Geschw., Beschleunigung etc.) dann bekommst du diese "Trägheit" von alleine.

    @TravisG: Wo spielt bei seinem Problem denn der Impuls eine Rolle?

    ein impuls spielt immer ne rolle, wenn sich der bewegungszustand eines körpers verändert.

    ich gab im den tipp für sein allgemeine interesse, falls es vorhanden ist. für sein problem is die allgemeine zeit-geschwindigkeisgleichung da oben perfekt ausreichend, auf den gedanken bin ich aber beim erstellen des posts nicht gekommen.



  • Läuft perfekt 😃


Anmelden zum Antworten