Antworten:
Sie können die einzelnen Komponenten mit sin und cos berechnen:
xSpeed = sin(direction)*speed;
ySpeed = cos(direction)*speed;
[...]
xPos += xSpeed;
yPos += ySpeed;
Die Beschleunigung erhöht einfach die Geschwindigkeit.
xAccel = sin(accelDirection)*accleration;
yAccel = cos(accelDirection)*accleration;
// [...]
xSpeed += xAccel;
ySpeed += yAccel;
Die Beschleunigung ist die Geschwindigkeit, mit der sich die Geschwindigkeit ändert. Wenn es Null ist, bewegen Sie sich mit Ihrer Startgeschwindigkeit weiter. Wenn es größer als Null ist und in der gleichen Richtung wie die aktuelle Geschwindigkeit liegt, nimmt die Geschwindigkeit zu.
velocity = old_velocity + acceleration;
position = old_position + velocity
Wenn Beschleunigung = 2 ist, erhöht sich Ihre Geschwindigkeit für jeden Zeitschritt um 2.
Um Bewegungs- oder Physikberechnungen durchzuführen, sollten Sie immer die Zeit verwenden, die seit dem letzten Frame (dt oder Delta) aufgewendet wurde. Dies hängt von der Implementierung der Hauptschleife ab, wird jedoch im Allgemeinen an eine Methode namens update als Parameter übergeben. (Wenn dies nicht verfügbar ist, nehmen Sie dt = 1 an.)
Um Geschwindigkeit mit Beschleunigung und Zeit und Position mit Geschwindigkeit und Zeit zu aktualisieren, können Sie:
speed += acceleration * dt;
position += speed * dt;
Beachten Sie, dass Beschleunigung, Geschwindigkeit und Position Vektoren sind, also haben sie die Operationen:
Weitere Informationen: http://en.wikipedia.org/wiki/Euclidean_vector#Addition_and_subtraction
Um einen Vektor mit einem bestimmten Winkel zu erstellen, können Sie die von Mr. Beast beschriebene Methode verwenden.
Um Reibung zu simulieren, können Sie Folgendes tun:
speed -= speed * friction
Wo Reibung eine Zahl sein sollte: 0 <Reibung <1
timeGetTime()
, um den vorherigen Frame zu berechnen. Vielen Dank.