ich habe ein Problem. Ich versuche 2 Modi für die Steuerung meines Raumschiffes (2D) zu implementieren:
- manuell (Schub geben, Steuerdüsen ansteueren)
- automatisch (Mausklick -> fliege zu)
Ein Schiff hat bei mir folgende Attribute:
- Friction = Reibung (aus Gameplay-Gründen ;) )
- MaxSpeed = maximale Geschwindigkeit
In jeder Frame passiert jetzt (unter anderen) Folgendes:
Code: Alles auswählen
this->m_vVelocity; // aktuelle Geschwindigkeit
this->m_rFriction; // Reibung
this->m_rThrottle; // Schub ... von -0.5f bis 1.0f (=Vollschub)
deltaTime; // (float) Wie viel Zeit ist seit der letzten Frame vergangen?
this->m_vVelocity.z += this->m_rThrottle * this->m_rMaxAccel * deltaTime;
Vector3 vMove = this->m_vVelocity * deltaTime; // wie muss ich das Schiff in dieser Frame bewegen?
this->entity().getParentSceneNode()->translate(vMove, LOCAL);
if(this->m_rMovementFriction != 1.0f) this->m_vVelocity *= powf(this->m_rFriction, deltaTime);
Nun will ich für den Steuerungsmodus "automatisch" den Schub zurücknehmen (auf 0 setzen) sobald das Schiff soweit vom Zielpunkt entfernt ist, dass es direkt anhält (ich denke eine Genauigkeit von 0.0001 sollte reichen).
Wie gehe ich das an? Mir wurde was von Intergralen und Grenzwerten empfohlen, aber da bin ich nicht das hellste Licht am Sternenhimmel...
Die Rotation kann hier vernachlässigt werden, da ich vermute dass ich die hier gewonnenen Informationen problemlos auf die Rotation übertragen kann.
Vielen Dank schonmal
DonElik