accelerate(var* speed,var accel,var friction);

Berechnet die Bewegungsdistanz für eine gegebene Geschwindigkeit (speed) und Beschleunigung (accel). Der Widerstand durch ein umgebendes Medium lässt sich über den Reibungsparameter (friction) angeben. Diese Funktion kann für Actor-Bewegung und Rotation verwendet werden.

Parameter:

speed gegenwärtige Geschwindigkeit in Quants pro Tick. Dieser Wert wird von der Beschleunigung verändert.
accel Beschleunigung in Quants pro Quadrat-Tick.
friction Reibungswiderstand des umgebenden Mediums im Bereich 0..1. 0 bedeutet keine Reibung, 1 völliger Widerstand.

Rückgabewert:

Zurückzulegende Strecke in Quants.

Modifiziert:

speed - Aktueller Geschwindigkeitsvektor in Quants pro Tick.

Geschwindigkeit:

Schnell

Algorithmus:

if (friction == 0) {
   distance = speed*time_step + 0.5*accel*time_step*time_step
   speed = speed + accel*time_step
} else {
   distance = accel*time_step/friction + (speed-accel/friction)*(1-exp(-friction*time_step))/friction
   speed = accel/friction + (speed-accel/friction)*exp(-friction*time_step) 
}  

Beispiel:

var aspeed; // lokale Variable um die gegenwärtige Geschwindigkeit zu speichern
// beschleunige die Camera Links/Rechts Drehung mit den Cursortasten.
vec_add(camera.pan,accelerate(aspeed,5*key_force.x,0.7));

Siehe auch:

vec_accelerate,smooth

► Aktuelle Version Online