Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Version 2 (modified by landauf, 16 years ago) (diff)

AnimationPlayer

The AnimationPlayer is a Class that handles Animations of many different Kinds. The AnimationPlayer sets all animations into movement. The AnimationPlayer holds a List of all Animation's

Animation

An animation is a list of keyframes, which over time is iterated between.

There are currenty two possibilities to create an Animation

  • Animation3D: handles movement of 3D-objects.
  • tAnimation: handles animation of float-variables.

They both extend the Animation Class, and are handled with the AnimationPlayer.

Animation knows the following important Functions:

  • setInfinity(ANIM_INFINITY): sets up what should be done with the Animation, when run to the end.
    • ANIM_INF_CONSTANT: Stay at the endValue, and do not do anything furthermore.
    • ANIM_INF_REPLAY: Replays the Animation
    • ANIM_INF_REWIND: goes to the beginning of the Animation and stops there
    • ANIM_INF_DELETE: deletes the Animation: this only goes for TOTALY-handled object. eg. no references may be existent (but in AnimationPlayer (where you do not have to care)) or SEGFAULT!!
  • Playing functions:
    • play(); starts Playing
    • stop(); goes to the beginning and stops playing eg. rewind+pause
    • pause(); pauses playing
    • replay(); replays the animation eg. rewind+play
    • rewind(); rewinds the function eg. go to the beginning of the animation
  • tick(float): this advances the animation about the time given in the argument
  • doNotHandle(): this tells the AnimationPlayer, that this Animation will not be handled by it. Meaning it will not be ticked automatically, and will not be deleted with the AnimationPlayer at the end of the level.
  • ANIM_FUNCTION: the last input of addKeyframe(). The following Description shows how they flow from the now added KeyFrame to the next one. Just imagine the upper point to be the initial state and the other to be the destination: horizontal axis is time, vertical axis is location. The movement form is the projection of these functions onto a plane. eg. ANIM_SINE: first, the movement is very fast, in the middle part slow and then fast again.
https://www.orxonox.ethz.ch/pictures/wiki/ANIM_CONSTANT.jpg https://www.orxonox.ethz.ch/pictures/wiki/ANIM_LINEAR.jpg https://www.orxonox.ethz.ch/pictures/wiki/ANIM_SINE.jpg
https://www.orxonox.ethz.ch/pictures/wiki/ANIM_COSINE.jpg https://www.orxonox.ethz.ch/pictures/wiki/ANIM_EXP.jpg https://www.orxonox.ethz.ch/pictures/wiki/ANIM_NEG_EXP.jpg

Animation3D

example:

#include "animation3D.h"
...

PNode* dummy = new PNode();                      // creates a new ParentNode that we will animate
Animation3D* animation = new Animation3D(dummy); // creates a new Animation that operates on the transformation of dummy.

animation->setInfinity(ANIM_INF_REPLAY);        // tell the animation to replay at the end

/* adding a KeyFrame, that has position 0/0/0,
 standard Quaternion,
 the duration to the next Keyframe will be 1.0 seconds,
 and the type of animation will be linear. */
animation->addKeyFrame(Vector(), Quaternion(), 1.0, ANIM_LINEAR); 

// this adds a second KeyFrame, at Position 1/0/0.
animation->addKeyFrame(Vector(1, 0, 0), Quaternion(), 0.5, ANIM_CONST); 
....

this already describes an animation of a 3D-transformation. As you can see, you do not have to concern yourself with adding it to any list, because the constructor does it for you, the animation will be ticked automatically.
this is already everything you have to know about this.

tAnimation

the tAnimation is a Template-Animation, that is able to animate every function (that takes a float as input) of all the possible objects, that exist in orxonox.
example:

#include "t_animation.h"
...

// initialize this->trackText 

/* create a new Animation on the Class Text,
   object trackText
   function Text::setBlending(float)
*/
tAnimation<Text>* textAnimation = new tAnimation<Text>(this->trackText, &Text::setBlending);

textAnimation->setInfinity(ANIM_INF_CONSTANT);
textAnimation->addKeyFrame(1.0, 3.0, ANIM_NEG_EXP);
textAnimation->addKeyFrame(0.0, .001);

as you can see, it is practically the same as Animation3D, but the Constructor is different (a little bit more complex, but done once, do it in your sleep) and the addKeyFrame-function takes only a float instead of position and rotation as input.

Below is a little diagram, of how the AnimationPlayer is bound into orxonox:

http://www.orxonox.ethz.ch/additionals/AnimationPlayer.png