Skripting (Animationen)
Aus PantheonWiki
Dieser Artikel ist vermutlich veraltet. Beispiele ungetestet, API inzwischen erweitert Bitte überprüfe, ob du etwas dazu weißt, korrigiere den Inhalt und entferne diesen Kasten. Verlasse dich andernfalls nicht auf die Information, sondern befrage einen Verantwortlichen (und bitte ihn, den Artikel zu aktualisieren).
Animationen lassen sich über Ruby starten und steuern. Dabei kann man Geschwindigkeit, Einfluss und sogar eine Reaktion einfügen, die bei dem erreichen bestimmter Konditionen durchgeführt wird.
Inhaltsverzeichnis |
Der AnimationManager
Diese Klasse verwaltet sämtliche Animationen und kümmert sich um das Starten und Stoppen dieser
API
static AnimationManager getSingleton();
Gibt die Instanz des AnimationManagers zurück
enum InterpolationMode { IM_LINEAR, IM_SPLINE };
Interpolations-Modus, Spline ist besser, braucht auch mehr Perfomance
enum RotationInterpolationMode { RIM_LINEAR, RIM_SPHERICAL };
RotationsInterpolations-Modus, Spherical ist genauer, aber aufwändiger
TrackAnimation createTrackAnimation(Actor actor, string name, Real length );
Erzeugt eine neue, leere TrackAnimation, der der SceneNode des Actors zugeordnet wird.
- actor Der zugeordnete Actor
- name Der einzigartige Name der Animation
- length Die gewünschte Länge des Tracks
void removeAnimation( Animation anim );
Entfernt eine Animation, und stoppt das Abspielen dieser
void setGlobalAnimationSpeed( Real speed );
Globale Beschleunigung, für SlowMotion oder andere sinnige Effekte
- speed Der Beschleunigungsfaktor.
- Negative Werte lassen das Spiel nicht rückwärts laufen, nur die Animationen.
Real getGlobalAnimationSpeed( );
Gibt die globale Beschleunigung zurück
void setDefaultInterpolationMode( InterpolationMode im );
Setzt den Standard InterpolationsModus für neue Animationen
InterpolationMode getDefaultInterpolationMode();
Gibt den StandardInterpolationsModus für neue Animationen zurück
void setDefaultRotationInterpolationMode( RotationInterpolationMode rim );
Setzt den StandardRotationsInterpolationsModus für neue Animationen
RotationInterpolationMode getDefaultRotationInterpolationMode();
Gibt den Standard RotationsInterpolationsModus für neue Animationen zurück
Der AnimationManager ist als globale Variable $AnimMgr definiert, und kann über diese angesteuert werden.
Anwendung
# Erzeugen einer Fackel
fackel = $AM.createMeshActor("Fackel","fackel.mesh");
fackel.placeIntoScene([100.0, 16.0, 100.0], [0.0, 0.0, 0.0]);
# Erstellen eines einfachen Tracks
# - für die fackel
# - mit dem _EINZIGARTIGEN_ Namen "testTrackAnimation"
# - Und der Länge von 4 Sekunden
trackAnim = $AnimMgr.createTrackAnimation( fackel, "testTrackAnimation", 4.0 );
# Und weg damit
$AnimMgr.removeAnimation( trackAnim );
Animationen
Diese Klasse ermöglicht eine einfache Steuerung von Animationseinstellungen und ist die Basisklasse erweiterter Animationen.
API
bool isPaused();
Gibt zurück ob die Animation pausiert ist
void setPaused( bool isPaused );
Pausieren/Fortsetzen der Animation
- isPaused Zukünftiger Status
- Löst einen AnimationPaused/Unpaused Event aus
bool isIgnoringGlobalSpeed();
Gibt zurück ob die globale Beschleunigung ignoriert wird
void setIgnoringGlobalSpeed( bool isIgnoringGlobalSpeed );
Setzt die Ignoranz
- isIgnoringGlobalSpeed Die zukünftige Ignoranz der globalen Geschwindigkeit
- Möglichkeit die globale SlowMotion zu umgehen. Nützlich für Statusanzeigen, oder ähnliche konstante Animationen
Real getSpeed();
Gibt die aktuelle Geschwindigkeit zurück
void setSpeed( Real speed );
Setzt die aktuelle Geschwindigkeit der Animation
- speed die Geschwindigkeit
- 1.0 ist die normale Geschwindigkeit der Animation (mLength in Sekunden), negative Werte spielen die Animation rückwärts ab. Bei 0 herrscht Stillstand.
void reverseAnimation();
Negiert die aktuelle Geschwindigkeit
void setTimesToPlay(unsigned int timesToPlay);
Setzt die maximalen Wiederholungszahl der Animation
- timesToPlay Die nicht negative Anzahl der Wiederholungen
- Bei 0 wird die Animation beliebig oft wiederholt
unsigned int getTimesPlayed();
Gibt die Anzahl der bereits vollständig abgespielten Wiederholungen zurück
void resetTimesPlayed();
Setzt die Abspielzeit zurück
- Löst dabei auch eine mögliche Pause auf, und spult die Animation zurück
unsigned int getTimesToPlay();
Gibt zurück wieviel Wiederholungen insgesamt abzuspielen sind
unsigned int getTimesToPlayLeft();
Gibt zurück wieviele Wiederholungen noch durchzuführen sind
Real getTimePlayed();
Gibt die Abspieldauer zurück
Real getWeight(void);
Gibt das Gewicht der Animation zurück
void setWeight(Real weight);
Setzt das Gewicht (Einfluss) der Animation
- weight Das Gewicht der Animation
void addAnimationListener( AnimationListener listener);
Fügt einen AnimationListener hinzu
- listener Der hinzuzufügende Listener
- Der Listener wird benachrichtigt, wenn (a) die Animation pausiert/fortgesetzt wird (b) die Animation ihr gesamten Wiederholungen vollendet hat
void removeAnimationListener( AnimationListener listener);
Entfernt einen AnimationListener
void addAnimationFrameListener( AnimationFrameListener listener, float frameNumber );
Fügt einen AnimationFrameListener hinzu
- listener Der hinzuzufügende Listener
- frameNumber Die zu überwachende Zeitindex
- Der Listener wird benachrichtigt, wenn der Zeitindex erreicht oder übersprungen wird. Dabei wird, falls der Fortschritt größer als die Länge der Animation korrekt geprüft, so dass keine Events verloren gehen
Anwendung
# Erstellen eines laufenden Roboters
actBotter = $AM.createMeshActor("Botter","robot.mesh");
actBotter.placeIntoScene( [160.0, 24.0, 160.0], [0.0, 0.0, 0.0] );
boBotter = actBotter.getControlledObject();
# Animation "Walk" starten
boBotter.startAnimation( "Walk" );
# Die Laufende Animation "Walk" holen
anim = boBotter.getAnimation( "Walk" );
# Geschwindigkeit setzen
anim.setSpeed( 4.0 );
TrackAnimation
Diese Klasse stellt eine Möglichkeit zur Verfügung, einfach Tracks zu erzeugen denen Aktoren folgen.
API
void addKeyFrame( Real timePos );
Setzt ein neues Keyframe an einer Zeitposition
- timePos Die ZeitPosition
- Bei 0 existiert schon zu Beginn ein Keyframe
void setKeyFrameTranslation( Real timePos, Real xPos, Real yPos, Real zPos );
Setzt die Verschiebung bei einem KeyFrame
- timePos Die ZeitPosition des KeyFrames
- xPos Die x-Position
- yPos Die y-Position
- zPos Die z-Position
- Sollte das KeyFrame nichts existieren, wird das davorliegende KeyFrame überschrieben
void setKeyFrameRotation( Real timePos, Real xRotAxis, Real yRotAxis, Real zRotAxis, Real angleUnits );
Setzt die Verschiebung bei einem KeyFrame
- timePos Die ZeitPosition des KeyFrames
- xRotAxis Die Achsendefinition
- yRotAxis Die Achsendefinition
- yRotAxis Die Achsendefinition
- angleUnits Die Drehung ( in Grad )
- Sollte das KeyFrame nichts existieren, wird der davorliegende KeyFrame überschrieben
void setKeyFrameScale( Real timePos, Real xScale, Real yScale, Real zScale );
Setzt die Skalierung bei einem KeyFrame
- timePos Die ZeitPosition des KeyFrames
- xScale Die x-Skalierung
- yScale Die y-Skalierung
- zScale Die z-Skalierung
- Sollte das KeyFrame nichts existieren, wird das davorliegende KeyFrame überschrieben
void setInterpolationMode( rl::AnimationManager::InterpolationMode im );
Setzt die Art der Interpolation (InterpolationMode aus AnimationManager
AnimationManager::InterpolationMode getInterpolationMode();
Gibt die Art der Interpolation zurück
void setRotationInterpolationMode( rl::AnimationManager::RotationInterpolationMode im );
Setzt die Art der RotationsInterpolation zurück (RotationInterpolationMode aus AnimationManager)
AnimationManager::RotationInterpolationMode getRotationInterpolationMode();
Gibt die Art der RotationsInterpolation zurück
void setUseShortestRotationPath ( bool useShortestPath );
Setzt ob bei Rotation der kürzeste Weg benutzt werden soll
bool getUseShortestRotationPath ();
Gibt zurück ob bei Rotation der kürzeste Weg benutzt werden soll
Anwendung
# Einfacher Track
tischlein = $AM.createMeshActor("TavernenTisch","tisch_taverne.mesh");
tischlein.placeIntoScene( [160.0, 24.0, 160.0], [0.0, 0.0, 0.0] );
testTrackAnimation = $AnimMgr.createTrackAnimation( tischlein, "testTrackAnimation", 6.0 );
testTrackAnimation.addKeyFrame( 0.0 );
testTrackAnimation.setKeyFrameTranslation( 0.0, 0.0, 0.0, 0.0 );
testTrackAnimation.addKeyFrame( 6.0 );
testTrackAnimation.setKeyFrameTranslation( 1.0, 0.0, 100.0, 0.0 );
# Begrenzte Abspielanzahl setzen
testTrackAnimation.setTimesToPlay( 1 );
testTrackAnimation.setSpeed( 2.0 );
# Und los gehts
testTrackAnimation.setPaused( false );
