Modelle mit Scripten animieren ed
Animiert wird ein Modell (model).
Standart-Fall ed
Bei einem neu geladenen Modell wird automatisch die erste Animation als Schleife abgespielt (diejenige, die im Editor den niedrigsten Index hat).
Script ed
Zuerst müssen mit ModelMoveReset alle bisherigen Animationsdaten des Modells gelöscht werden.
Das eigentliche Animieren geschieht mit ModelMoveSet. Sollen sich mehrere Animationen überlagern, wird diese Funktion mehrmals mit den Daten der unterschiedlichen Animationen aufgerufen. Man benötigt für jede Animation eine eigene Variable vom Typ float, die speichert, wie weit die Animation schon ist, diese wird an die Funktion übergeben und von dieser weitergezählt.
Wenn sich ein Modell kontinuierlich bewegen soll (was fast immer der Fall ist!), müssen diese Befehle in einer Schleife ausgeführt werden.
Beispiel:
void main()
{
// Modell waehlen
model m = this->model;
// die Variablen, die den Vortschritt der Animationen speichern
float time_1 = 0;
float time_2 = 0;
// Animationen abspielen lassen
while(true){
// Geschwindigkeit des Objektes berechnen
float v = VecLength( &this->Vel );
// Zuruecksetzen der Animationsdaten
ModelMoveReset( m );
// erste Animation
ModelMoveSet( m,
MoveOpSet, 0, 0, // alles bisherige ueberschreiben
23, // Animation mit Index 23
&time_1,
elapsed, // in Spielzeit weiter zaehlen
v, // abhaengig von der Geschwindigkeit
true ); // als Schleife
// zweite Animation
bool b = ModelMoveSet( m,
MoveOpNewKeyed, 0, 0, // ueberschreiben, nur wenn es wichtig ist
8, // Animation mit Index 8
&time_2,
elapsed * 0.5f, // in halber Spielzeit weiter zaehlen
0, // unabhaengig
false ); // einmalig
// Test, ob die 2. Animation zu Ende ist
if (b){
// ...
}
wait_of();
}
}