From 7eb248b1f0ae05e2eb165a04f37bbf8eadaf77d6 Mon Sep 17 00:00:00 2001 From: Elliot Smith Date: Thu, 11 Nov 2010 11:44:28 +0000 Subject: [PATCH] cookbook: First draft for looping animations recipe Includes video showing the looped animation and basic section headings, plus outline of content and notes. --- doc/cookbook/Makefile.am | 1 + doc/cookbook/animations.xml | 87 +++++++++++++++++++-- doc/cookbook/videos/animations-looping.ogv | Bin 0 -> 29011 bytes 3 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 doc/cookbook/videos/animations-looping.ogv diff --git a/doc/cookbook/Makefile.am b/doc/cookbook/Makefile.am index e8ca016e5..814dd5477 100644 --- a/doc/cookbook/Makefile.am +++ b/doc/cookbook/Makefile.am @@ -64,6 +64,7 @@ VIDEO_FILES = \ videos/animations-reuse.ogv \ videos/animations-moving-anchors.ogv \ videos/animations-moving-depth.ogv \ + videos/animations-looping.ogv \ $(NULL) EXTRA_DIST = \ diff --git a/doc/cookbook/animations.xml b/doc/cookbook/animations.xml index e9843511c..c137f9905 100644 --- a/doc/cookbook/animations.xml +++ b/doc/cookbook/animations.xml @@ -2311,19 +2311,94 @@ clutter_animator_start (animator);
Problem - ... + You want to loop an animation so it repeats indefinitely.
- Solution + Solutions + + Each animation + approach can be used to create a looping animation. The + approach for each is covered below. + + The animation implemented in each case is a simple repeated + movement of a rectangle from the right to the left of the state, + then back, like this: + + + + + + + Video showing simple looped movement of an actor + + + +
+ Solution 1: looping an implicit animation + + Implicit animations (started using + clutter_actor_animate()) can be looped via + their associated ClutterTimeline. + + First, create a ClutterTimeline which is + set to loop: + + + +??? + + + + Use this timeline when starting the animation on an + actor: + + + +??? + + + + NB at the end of the timeline, before the next iteration + of the loop, the actor will "jump" back + to where it was when the animation started. To prevent this + happening, you can invert the direction of the timeline + each time an iteration completes. This will then make the + animation run "backwards" on the next iteration. + This example + demonstrates how to do run an animation forwards and backwards + on a loop. See this recipe + for more details. +
+ +
+ Solution 2: looping with <type>ClutterAnimator</type> + + ??? +
+ +
+ Solution 3: looping with <type>ClutterState</type> + + you could use an looping timeline to cycle a ClutterState; + but you don't need to because ClutterState has implicit timelines you + don't need to interact with directly (for this case)??? + + You can loop ClutterState animations by + creating a cycle of states which + "swallows + its own tail": i.e. goes from a start state, through + intermediate state(s), back to the start state, then again + through the intermediate states(s), back to the start state, + ad infinitum. +
- ...
Discussion - ... + interrupting a looped animation???
@@ -2339,7 +2414,7 @@ clutter_animator_start (animator); - Looping a <type>ClutterAnimator</type> animation + Looping with <type>ClutterAnimator</type> a code sample should be here... but isn't @@ -2348,7 +2423,7 @@ clutter_animator_start (animator); - Looping a <type>ClutterState</type> animation + Looping with <type>ClutterState</type> a code sample should be here... but isn't diff --git a/doc/cookbook/videos/animations-looping.ogv b/doc/cookbook/videos/animations-looping.ogv new file mode 100644 index 0000000000000000000000000000000000000000..f1e23cfe0b2579cb67bde16d28d5409d6aa8508f GIT binary patch literal 29011 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