ent_animate(ENTITY* entity, STRING* scene, var percent, var mode)
Animiert eine Modell-, Terrain- oder Sprite-Entity durch Interpolation
innerhalb einer zyklischen oder azyklischen Animationsszene.
ent_animatefrom(ENTITY* entity, ENTITY* source, STRING* scene, var percent, var mode)
Wie ent_animate, lädt aber die Bones-Animation aus einer separaten Entity. Auf diese Weise können Bones-Animationsszenen von Entities geteilt werden. A7.82 LC
Parameter:
entity |
Zu animierende Entity |
source |
Entity, die die Animationsszene enthält. Nur für Bonesanimationen. Die Skelette beider Entities müssen identisch sein. |
scene |
Name der Bones- oder Vertes-Animationsszene ohne die abschließende
Nummer, oder NULL zum Zurücksetzen
von frame, nextframe
und dem Skelett der Entity auf ihren jeweiligen Defaultstatus.
Das Resetten des Skeletts wird vor dem Kombinieren einer Bonesanimation
nötig. |
prozent |
Prozentualer Animationsverlauf der Szene, 0..100.
Bei 0 wird der erste Frame ausgewählt, bei 100 der Letzte (welcher
bei zyklischen Animationen identisch mit dem Ersten ist). |
mode |
Wird aus den folgenden vordefinierten Werten kombiniert:
ANM_SKIP |
Um die Frames nicht zu interpolieren. |
ANM_CYCLE |
Zyklische Animationsszene wie Gehen oder Rennen; andernfalls
ist es eine azyklische Animation wie Springen oder Schiessen. |
ANM_ADD |
Zum Kombinieren einer Bones-Animation aus mehreren ent_animate- Aufrufen.
Neue Bones-Winkel werden zu den aktuellen Winkeln addiert,
statt
die gegenwärtigen
Winkel
durch die Neuen zu ersetzen. |
|
Rückgabewert:
> 0 |
Nummer des Zielframes einer Vertex- oder Spriteszene |
< 0 |
Nummer des Zielframes einer Bonesszene |
0 |
Es konnte keine Szene mit dem angegebenen Namen gefunden werden |
Modifiziert:
entity.frame |
wird auf den gegenwärtigen
Frame plus Interpolationsfaktor gesetzt. |
entity.next_frame |
wird im auf den nächsten Zielframe
zur Interpolation gesetzt, oder auf 0 zurückgesetzt. |
Geschwindigkeit:
Mittel (Vertex- oder Sprite-Animation)
Langsam (Bones-Animation)
Bemerkungen:
- Enthält die Szene eine Bones-Animation, ändert die Anweisung das Skelett der Entity. Nur Bones Nur die Bones, die von der Szene betroffen
sind, erhalten eine neue Ausrichtung; nicht von dieser Szene betroffene Bones
behalten ihren alten Status.
Wird diese Anweisung mehrmals hintereinander
für verscheidene Animations-Szenen
aufgerufen, werden Bones Animationen kombiniert.
- Benutzen Sie ANM_ADD, um verschiedene Bonesbewegungen
zu kombinieren, selbst wenn diese dieselben Bones verwenden.
Wenn z.B. ein Bone
bereits um 10 Grad gedreht wurde und die neue Szene denselben Bone um weitere
20 Grad dreht, ist der neue Bonewinkel nach ent_animate mit ANM_ADD 30
Grad. Ohne ANM_ADD beträgt sein neuer Winkel 20
Grad. Bones-Animationen können auch mit einer direkten Bonesmanipulation
durch ent_bonerotate oder ähnliche Anweisungen kombiniert
werden.
- In Multiplayer Spielen verursacht das Senden von Bones-Animationen hohen
Traffic, außerdem wird zwischen den Bones-Frames nicht interpoliert. Nur
Grundanimationen - ohne ANM_ADD und
ohne direkte Bonesmanipulation - werden übertragen. Wir empfehlen dringend,
Bones- und Vertex-Animationen unter Verwendung einer lokalen Funktion
auf der Client Seite auszuführen
und auf dem Server das Flag nosend_frame für
die Entity zu setzen.
- ent_animate(entity,NULL,0,0) setzt alle Bones-Posen
der Entity zurück.
- Szene- und Bone-Namen müssen aus mindestens 3 Zeichen bestehen. Zum Finden
der Szene wird nur die Länge des scene String
verglichen. Daher dürfen Modelle keine Szene-Namen enthalten, die mit dem
kompletten Namen einer anderen Szene beginnen.
Edition:
C
P
für Bones-Frames. Vertex und Sprite-Frames sind mit allen Editionen
möglich.
Beispiele:
action vertex_anim()
{
while()
{
my.skill1 += 3*time_step;
if (my.skill1 > 100) my.skill1 -= 100;
ent_animate(me,"walk",my.skill1,ANM_CYCLE);
wait(1);
}
}
// let a model run, and smoothly blend over to shooting when [Ctrl] is pressed
action bones_anim()
{
while(1)
{
my.skill1 += 3*time_step; // torso animation
my.skill2 += 3*time_step; // legs animation
if (key_ctrl) // fire key pressed?
{
my.skill3 += 20*time_step; // blend factor for 1-frame shooting animation
my.skill3 = min(my.skill3,100); // clip at 100 percent
} else {
my.skill3 -= 20*time_step;
my.skill3 = max(my.skill3,0); // clip at 0 percent
}
// reset skeletion and then compose the animation (order is important):
ent_animate(me,NULL,0,0); // reset all bones
// first, shake the arms during running
ent_animate(me,"run_torso",my.skill1,ANM_CYCLE);
// then blend over to, or blend back from shooting (only affects the arms)
if (my.skill3 > 0) { ent_blend("shoot",0,my.skill3); }
// finally animate the legs (only affects the legs)
ent_animate(me,"run_legs",my.skill2,ANM_CYCLE+ANM_ADD);
wait(1);
}
}
Siehe auch:
ent_blend, pose
► Aktuelle Version Online