Programmieren eines sanften Schubwechsels vom aktuellen Geschwindigkeitsvektor zum Zielvektor

TL; dr: "Ich bin nicht sicher, wie ich einen reibungslosen Schubübergang zwischen einem Vektor und einem anderen berechnen soll."

Ich programmiere ein einfaches Spiel, in dem ein Feind den Spieler auf freiem Feld (ohne Mauern) verfolgt. Ich habe die x & y-Geschwindigkeiten des Gegners unabhängig berechnet, sie beschleunigt, wenn sie in die Richtung des Spielers gingen, und sie schnell verlangsamt, wenn sie in die falsche Richtung gingen (z. B. EnemyVelocity.x> 0 & player.x <enemy.x) , dann EnemyVelocity.x - 2.)

Während das Gameplay anständig Spaß macht, dem Feind auszuweichen, ist es mein Wunsch, dass sich der Feind mit der richtigen Physik verhält. Was ich gerade tue, ist, dass der Feind seinen Schub (denke an ein Raumschiff) basierend auf dem Winkel zwischen ihm und dem Spieler festlegt und seinen Schub auf eine maximale Geschwindigkeit beschleunigt (Berechnung der Seite c des EnemyVelocity-Dreiecks). In diesem Fall bin ich mir nicht sicher, wie sich der Schub am besten selbst einstellen lässt. Wenn ich keine Höchstgeschwindigkeit lasse, beschleunigt der Feind schnell, überschießt jedoch leicht den Spieler und braucht dann eine lange Zeit, um genügend Schwung zurück in die Richtung des Spielers zu bekommen.

Ich möchte, dass der Feind auf dem Weg zum Spieler ständig seine Geschwindigkeit anpasst und auf jeden Ort zielt (ich möchte nicht, dass er vorhersagt, wo Sie sich befinden). Wenn sie dann den Spieler verpassen, möchte ich mit den gleichen Schub- und Beschleunigungsformeln ihre Geschwindigkeit neu einstellen und sie an den Spieler zurückschicken.

Ich denke, das werden zwei Vektoren sein: einer, auf dem der Feind gerade unterwegs ist, und einer, auf dem der Feind reisen möchte (der Vektor, der ihn direkt zum Spieler bringt). Ich bin nicht sicher, wie ich einen reibungslosen Schubübergang zwischen einem Vektor und einem anderen berechnen soll.

Alle Tipps, Formeln oder Fragen werden sehr geschätzt! Vielen Dank, dass Sie Stack Overflow.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage