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 );

AnimationListener

API

Anwendung

AnimationFrameListener

API

Anwendung

Persönliche Werkzeuge
Link zur berliOS-Projektseite