Jason,
Anstatt drei Objektattribute zu haben,
- Punktposition (x, y)
- Vector2D (x, y) Richtung
- Int Geschwindigkeit
es ist oft viel einfacher, richtung und geschwindigkeit zu einem geschwindigkeitsvektor zu kombinieren. Dann haben Sie nur zwei Attribute,
- Punktposition (x, y)
- Vector2D (x, y) Geschwindigkeit
Position wird aktualisiert
Wenn Sie die Position des Objekts aktualisieren müssen, ist dies so einfach wie:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
wo Δt
ist dein Zeitdelta - oder Zeitunterschied - oder Zeitschritt.
Aktualisieren von Position und Geschwindigkeit
Auf diese Weise ist es auch sehr einfach, mit Beschleunigungen umzugehen (z. B. durch Schwerkraft). Wenn Sie einen Beschleunigungsvektor haben, können Sie die Geschwindigkeit und die Position wie folgt zusammen aktualisieren:
position.x += (velocity.x * Δt) + (0.5 * acceleration.x * Δt * Δt);
position.y += (velocity.y * Δt) + (0.5 * acceleration.y * Δt * Δt);
velocity.x += acceleration.x * Δt;
velocity.y += acceleration.y * Δt;
(Dies ist im Grunde die Formel s = vt + ½at² aus Physik 101.)
Eine Geschwindigkeit anwenden
Wenn Sie eine bestimmte Geschwindigkeit in einer normalisierten Richtung anwenden möchten, können Sie die Geschwindigkeit folgendermaßen einstellen:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Geschwindigkeit ableiten
Und wenn Sie umgekehrt vorgehen müssen - die Geschwindigkeit und Richtung von einem gegebenen Geschwindigkeitsvektor ableiten - können Sie einfach den Satz von Pythagoras oder die .Length()
Methode verwenden:
speed = velocity.Length();
Und sobald die Geschwindigkeit bekannt ist, kann die normalisierte Richtung berechnet werden, indem die Geschwindigkeit durch die Geschwindigkeit dividiert wird (wobei darauf zu achten ist, dass keine Division durch Null erfolgt):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}