From cf18836ca0e9db22e745aaba59f647cba672962c Mon Sep 17 00:00:00 2001 From: Elliot Smith Date: Tue, 8 Feb 2011 14:37:59 +0000 Subject: [PATCH] docs: Add recipe for animating an actor on a curved path Show how to animate an actor using a ClutterPathConstraint. This demonstrates how to get effects similar to ClutterPathBehaviour with the modern animation APIs. Includes 3 examples: 1) Simple ClutterPathConstraint used with implicit animations 2) ClutterPathConstraint used to simulate circular animation, using ClutterAnimator 3) Creating simple curved path animations with non-linear easing --- doc/cookbook/Makefile.am | 1 + doc/cookbook/animations.xml | 271 ++++++++++++++++++ doc/cookbook/examples/Makefile.am | 6 + .../examples/animations-path-circle.c | 128 +++++++++ .../examples/animations-path-easing.c | 104 +++++++ doc/cookbook/examples/animations-path.c | 61 ++++ doc/cookbook/videos/animations-path.ogv | Bin 0 -> 39639 bytes 7 files changed, 571 insertions(+) create mode 100644 doc/cookbook/examples/animations-path-circle.c create mode 100644 doc/cookbook/examples/animations-path-easing.c create mode 100644 doc/cookbook/examples/animations-path.c create mode 100644 doc/cookbook/videos/animations-path.ogv diff --git a/doc/cookbook/Makefile.am b/doc/cookbook/Makefile.am index 0d022e7de..6fad1b4db 100644 --- a/doc/cookbook/Makefile.am +++ b/doc/cookbook/Makefile.am @@ -49,6 +49,7 @@ IMAGE_FILES = \ VIDEO_FILES = \ $(srcdir)/videos/animations-fading-out.ogv \ $(srcdir)/videos/animations-fading-in-then-out.ogv \ + $(srcdir)/videos/animations-path.ogv \ $(srcdir)/videos/animations-rotating-x-minus-45.ogv \ $(srcdir)/videos/animations-rotating-y-45.ogv \ $(srcdir)/videos/animations-rotating-z-90.ogv \ diff --git a/doc/cookbook/animations.xml b/doc/cookbook/animations.xml index dfdcf4385..4d65555ee 100644 --- a/doc/cookbook/animations.xml +++ b/doc/cookbook/animations.xml @@ -3055,4 +3055,275 @@ g_object_set (actor, +
+ Animating an actor along a curved path + +
+ Problem + + You want to animate an actor along a curved path: for + example, to move an actor in a circle or spiral. +
+ +
+ Solution + + Create a ClutterPath to describe the + path the actor should move along; then create a + ClutterPathConstraint based on that path: + + + +ClutterPath *path; +ClutterConstraint *constraint; + +/* create the path */ +path = clutter_path_new (); + +/* first node is at 30,60 */ +clutter_path_add_move_to (path, 30, 60); + +/* add a curve to the top-right of the stage, with control + * points relative to the start point at 30,60 + */ +clutter_path_add_rel_curve_to (path, + 120, 180, + 180, 120, + 240, 0); + +/* create a constraint based on the path */ +constraint = clutter_path_constraint_new (path, 0.0); + + + + + For more on the types of curve and line segment available, + see the ClutterPath API documentation. + + + Next, add the constraint to an actor; in this case, the + actor is a red rectangle: + + + +ClutterActor *rectangle; +ClutterActor *stage = clutter_stage_new (); + +/* ...set size stage, color, etc... */ + +const ClutterColor *red_color = clutter_color_new (255, 0, 0, 255); + +rectangle = clutter_rectangle_new_with_color (red_color); +clutter_actor_set_size (rectangle, 60, 60); + +/* add the constraint to the rectangle; note that this + * puts the rectangle at the start of the path, i.e. at position 30,60; + * we also give the constraint a name, so we can use it from an implicit + * animation + */ +clutter_actor_add_constraint_with_name (rectangle, "path", constraint); + +/* add the rectangle to the stage */ +clutter_container_add_actor (CLUTTER_CONTAINER (stage), rectangle); + + + + Note how the constraint has to be assigned a name (here, "path") + to make it accessible via implicit animations. + + Finally, animate the constraint's offset + property; which in turn moves the actor along the path: + + + +ClutterTimeline *timeline; + +/* create a timeline with 1000 milliseconds duration, which loops + * indefinitely and reverses its direction each time it completes + */ +timeline = clutter_timeline_new (1000); +clutter_timeline_set_loop (timeline, TRUE); +clutter_timeline_set_auto_reverse (timeline, TRUE); + +/* animate the offset property on the constraint from 0.0 to 1.0; + * note the syntax used to refer to the constraints metadata for the + * rectangle actor: + * + * "@constraints.<constraint name>.<property>" + */ +clutter_actor_animate_with_timeline (rectangle, CLUTTER_LINEAR, timeline, + "@constraints.path.offset", 1.0, + NULL); + +/* ...show the stage, run the mainloop, free memory on exit... */ + + + + The full + example shows how these fragments fit together. + The animation produced by this example looks + like this: + + + + + + + Video showing animation of an actor along a curved + path using ClutterPathConstraint + + + + The second full + example animates an actor around a simulated circle + using a more complex ClutterPath. + +
+ +
+ Discussion + + Animating an actor using ClutterPathConstraint + is the recommended way to animate actors along curved paths. It + replaces the older ClutterBehaviourPath. + + A ClutterPathConstraint constrains an + actor's x and y properties + to a position along such a ClutterPath: a path through + 2D space. The ClutterPath itself is composed of nodes + (x,y positions in 2D space), connected by straight lines or (cubic) + Bézier + curves. + + + ClutterPath doesn't have to be used in animations: + it can also be used in drawing (see the + non-rectangular actor + recipe). + + + The actor's position along the path is determined by the constraint's + offset property, which has a + value between 0.0 and 1.0. When the offset is 0.0, the actor + is at the beginning of the path; when the actor is at 1.0, the + actor is at the end of the path. Between 0.0 and 1.0, the actor + is some fraction of the way along the path. + + If you immediately set the offset for the + constraint (e.g. to 0.5), the actor is instantly placed + at that position along the path: for offset = 0.5, + at the halfway point. + + By contrast, to animate an actor along a path, you + animate the offset property of a + ClutterPathConstraint. The actor's position + along the path is dependent on the progress of the animation: + when the animation starts, the actor is at the beginning of the path; + by the end of the animation, it will have reached its end. + + If you animate the constraint using a linear easing mode, + the progress of the animation matches progress along the path: at + half-way through the animation, the actor will be half-way along + the path. + + However, if you are using a non-linear easing mode + (e.g. a quintic or cubic mode), the offset along the path and + progress through the animation may differ. This is because the + offset along the path is computed from the alpha value at that + point in the animation; this in turn depends on the alpha function + applied by the animation. (See the + animations introduction + for more details about alphas.) + + One way to think about this is to imagine the actor + making a journey along the path. The alpha function governs the + actor's speed, including how it speeds up and slows down + during its journey. The actor's speed may be constant + (as in a linear easing mode). Alternatively, the actor's speed + may not be constant: it might start out fast then slow down + (ease out); or start slow and speed up (ease in); or start and + end fast, but slow down in the middle (ease in and ease out); or + some other more complex arrangement (as in the bounce and elastic + easing modes). So where the actor is on the path at a particular + time doesn't directly relate to how long it's been travelling: + the position is determined both by how long it's been travelling, + and changes in its speed throughout the journey. + +
+ Other ways to animate along a path + + ClutterPathConstraint is the only + decent way of animating along curves in a predictable + and manageable fashion. It can also be used to animate along + paths composed of straight lines, though this isn't essential: you + can do straight line animations directly with ClutterAnimator, + ClutterState or implicit animations. But if + you need to animate between more than a half a dozen sets of + points joined by straight lines, ClutterPathConstraint + makes sense then too. + + It is also possible to animate actors over very simple, non-Bézier + curves without using ClutterPathConstraint. This + can be done by animating the actor's position properties using + a non-linear easing mode (see the ClutterAlpha + documentation for available modes, or write your own custom + alpha function). This + example shows how to animate two actors on + curved paths around each other without + ClutterPathConstraint. + + However, it is difficult to precisely calculate paths + with this approach. It is also only practical where you have a + very simple curve: if you want to chain together several curved + motions (as in the circle + example), this quickly becomes unwieldy. + + + + If you want physics-based animation, look at + clutter-box2d. + + + +
+ +
+ +
+ Full examples + + + Using a <type>ClutterPathConstraint</type> with + implicit animations to move an actor along a curved path + + + a code sample should be here... but isn't + + + + + + Using a <type>ClutterPathConstraint</type> with + <type>ClutterAnimator</type> to animate an actor on + a simulated circular path + + + a code sample should be here... but isn't + + + + + + Animating actors on curved paths using easing modes + + + a code sample should be here... but isn't + + + + +
+ +
+ diff --git a/doc/cookbook/examples/Makefile.am b/doc/cookbook/examples/Makefile.am index dfc855f25..2e4e28acd 100644 --- a/doc/cookbook/examples/Makefile.am +++ b/doc/cookbook/examples/Makefile.am @@ -11,6 +11,9 @@ noinst_PROGRAMS = \ animations-moving-animator \ animations-moving-implicit \ animations-moving-state \ + animations-path \ + animations-path-circle \ + animations-path-easing \ animations-reuse \ animations-rotating \ animations-scaling \ @@ -71,6 +74,9 @@ animations_looping_state_SOURCES = animations-looping-state.c animations_moving_animator_SOURCES = animations-moving-animator.c animations_moving_implicit_SOURCES = animations-moving-implicit.c animations_moving_state_SOURCES = animations-moving-state.c +animations_path_SOURCES = animations-path.c +animations_path_circle_SOURCES = animations-path-circle.c +animations_path_easing_SOURCES = animations-path-easing.c animations_reuse_SOURCES = animations-reuse.c animations_rotating_SOURCES = animations-rotating.c animations_scaling_SOURCES = animations-scaling.c diff --git a/doc/cookbook/examples/animations-path-circle.c b/doc/cookbook/examples/animations-path-circle.c new file mode 100644 index 000000000..23a13e69f --- /dev/null +++ b/doc/cookbook/examples/animations-path-circle.c @@ -0,0 +1,128 @@ +#include +#include + +#define STAGE_SIDE 400.0 + +static const ClutterColor stage_color = { 0x33, 0x33, 0x55, 0xff }; +static const ClutterColor red_color = { 0xff, 0x00, 0x00, 0xff }; + +/* Build a "circular" path out of 4 Bezier curves + * + * code modified from + * http://git.clutter-project.org/dax/tree/dax/dax-traverser-clutter.c#n328 + * + * see http://www.whizkidtech.redprince.net/bezier/circle/ + * for further explanation + */ +static ClutterPath * +build_circular_path (gfloat cx, + gfloat cy, + gfloat r) +{ + ClutterPath *path; + static gfloat kappa = 4 * (G_SQRT2 - 1) / 3; + + path = clutter_path_new (); + + clutter_path_add_move_to (path, cx + r, cy); + clutter_path_add_curve_to (path, + cx + r, cy + r * kappa, + cx + r * kappa, cy + r, + cx, cy + r); + clutter_path_add_curve_to (path, + cx - r * kappa, cy + r, + cx - r, cy + r * kappa, + cx - r, cy); + clutter_path_add_curve_to (path, + cx - r, cy - r * kappa, + cx - r * kappa, cy - r, + cx, cy - r); + clutter_path_add_curve_to (path, + cx + r * kappa, cy - r, + cx + r, cy - r * kappa, + cx + r, cy); + clutter_path_add_close (path); + + return path; +} + +static gboolean +key_pressed_cb (ClutterActor *actor, + ClutterEvent *event, + gpointer user_data) +{ + ClutterTimeline *timeline = CLUTTER_TIMELINE (user_data); + + if (!clutter_timeline_is_playing (timeline)) + clutter_timeline_start (timeline); + + return TRUE; +} + +int +main (int argc, + char *argv[]) +{ + ClutterPath *path; + ClutterConstraint *constraint; + ClutterAnimator *animator; + ClutterTimeline *timeline; + ClutterActor *stage; + ClutterActor *rectangle; + + clutter_init (&argc, &argv); + + stage = clutter_stage_new (); + clutter_actor_set_size (stage, STAGE_SIDE, STAGE_SIDE); + clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color); + g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); + + rectangle = clutter_rectangle_new_with_color (&red_color); + clutter_actor_set_size (rectangle, STAGE_SIDE / 8, STAGE_SIDE / 8); + clutter_actor_set_position (rectangle, + STAGE_SIDE / 2, + STAGE_SIDE / 2); + + clutter_container_add_actor (CLUTTER_CONTAINER (stage), + rectangle); + + /* set up a path and make a constraint with it */ + path = build_circular_path (STAGE_SIDE / 2, + STAGE_SIDE / 2, + STAGE_SIDE / 4); + constraint = clutter_path_constraint_new (path, 0.0); + + /* apply the constraint to the rectangle; note that there + * is no need to name the constraint, as we will be animating + * the constraint's offset property directly using ClutterAnimator + */ + clutter_actor_add_constraint (rectangle, constraint); + + /* animation to animate the path offset */ + animator = clutter_animator_new (); + clutter_animator_set_duration (animator, 5000); + + /* use ClutterAnimator to animate the constraint directly */ + clutter_animator_set (animator, + constraint, "offset", CLUTTER_LINEAR, 0.0, 0.0, + constraint, "offset", CLUTTER_LINEAR, 1.0, 1.0, + NULL); + + timeline = clutter_animator_get_timeline (animator); + clutter_timeline_set_loop (timeline, TRUE); + clutter_timeline_set_auto_reverse (timeline, TRUE); + + g_signal_connect (stage, + "key-press-event", + G_CALLBACK (key_pressed_cb), + timeline); + + clutter_actor_show (stage); + + clutter_main (); + + /* clean up */ + g_object_unref (animator); + + return EXIT_SUCCESS; +} diff --git a/doc/cookbook/examples/animations-path-easing.c b/doc/cookbook/examples/animations-path-easing.c new file mode 100644 index 000000000..8a1da760d --- /dev/null +++ b/doc/cookbook/examples/animations-path-easing.c @@ -0,0 +1,104 @@ +#include +#include + +typedef struct { + ClutterActor *red; + ClutterActor *green; + ClutterTimeline *timeline; +} State; + +static const ClutterColor stage_color = { 0x33, 0x33, 0x55, 0xff }; +static const ClutterColor red_color = { 0xff, 0x00, 0x00, 0xff }; +static const ClutterColor green_color = { 0x00, 0xff, 0x00, 0xff }; + +static void +reverse_timeline (ClutterTimeline *timeline) +{ + ClutterTimelineDirection dir = clutter_timeline_get_direction (timeline); + + if (dir == CLUTTER_TIMELINE_FORWARD) + dir = CLUTTER_TIMELINE_BACKWARD; + else + dir = CLUTTER_TIMELINE_FORWARD; + + clutter_timeline_set_direction (timeline, dir); +} + +/* a key press either starts the timeline or reverses it */ +static gboolean +key_pressed_cb (ClutterActor *actor, + ClutterEvent *event, + gpointer user_data) +{ + State *state = (State *) user_data; + + if (clutter_timeline_is_playing (state->timeline)) + reverse_timeline (state->timeline); + else + clutter_timeline_start (state->timeline); + + return TRUE; +} + +int +main (int argc, + char *argv[]) +{ + State *state = g_new0 (State, 1); + + ClutterActor *stage; + ClutterAnimator *animator; + + clutter_init (&argc, &argv); + + stage = clutter_stage_new (); + clutter_actor_set_size (stage, 400, 400); + clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color); + g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); + + state->red = clutter_rectangle_new_with_color (&red_color); + clutter_actor_set_size (state->red, 100, 100); + clutter_actor_set_position (state->red, 300, 300); + + state->green = clutter_rectangle_new_with_color (&green_color); + clutter_actor_set_size (state->green, 100, 100); + clutter_actor_set_position (state->green, 0, 0); + + animator = clutter_animator_new (); + clutter_animator_set_duration (animator, 1000); + + clutter_animator_set (animator, + state->red, "x", CLUTTER_LINEAR, 0.0, 300.0, + state->red, "y", CLUTTER_LINEAR, 0.0, 300.0, + state->red, "x", CLUTTER_LINEAR, 1.0, 0.0, + state->red, "y", CLUTTER_EASE_IN_QUINT, 1.0, 0.0, + NULL); + + clutter_animator_set (animator, + state->green, "x", CLUTTER_LINEAR, 0.0, 0.0, + state->green, "y", CLUTTER_LINEAR, 0.0, 0.0, + state->green, "x", CLUTTER_LINEAR, 1.0, 300.0, + state->green, "y", CLUTTER_EASE_IN_QUINT, 1.0, 300.0, + NULL); + + state->timeline = clutter_animator_get_timeline (animator); + + clutter_timeline_set_auto_reverse (state->timeline, TRUE); + + g_signal_connect (stage, + "key-press-event", + G_CALLBACK (key_pressed_cb), + state); + + clutter_container_add (CLUTTER_CONTAINER (stage), state->red, state->green, NULL); + + clutter_actor_show (stage); + + clutter_main (); + + g_object_unref (animator); + + g_free (state); + + return EXIT_SUCCESS; +} diff --git a/doc/cookbook/examples/animations-path.c b/doc/cookbook/examples/animations-path.c new file mode 100644 index 000000000..c3686578f --- /dev/null +++ b/doc/cookbook/examples/animations-path.c @@ -0,0 +1,61 @@ +#include +#include + +int +main (int argc, + char *argv[]) +{ + ClutterActor *stage; + ClutterPath *path; + ClutterConstraint *constraint; + ClutterActor *rectangle; + ClutterTimeline *timeline; + + const ClutterColor *stage_color = clutter_color_new (51, 51, 85, 255); + const ClutterColor *red_color = clutter_color_new (255, 0, 0, 255); + + clutter_init (&argc, &argv); + + stage = clutter_stage_new (); + clutter_actor_set_size (stage, 360, 300); + clutter_stage_set_color (CLUTTER_STAGE (stage), stage_color); + g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); + + /* create the path */ + path = clutter_path_new (); + clutter_path_add_move_to (path, 30, 60); + + /* add a curve round to the top-right of the stage */ + clutter_path_add_rel_curve_to (path, + 120, 180, + 180, 120, + 240, 0); + + /* create a constraint based on the path */ + constraint = clutter_path_constraint_new (path, 0.0); + + /* put a rectangle at the start of the path */ + rectangle = clutter_rectangle_new_with_color (red_color); + clutter_actor_set_size (rectangle, 60, 60); + + /* add the constraint to the rectangle */ + clutter_actor_add_constraint_with_name (rectangle, "path", constraint); + + /* add the rectangle to the stage */ + clutter_container_add_actor (CLUTTER_CONTAINER (stage), rectangle); + + /* set up the timeline */ + timeline = clutter_timeline_new (1000); + clutter_timeline_set_loop (timeline, TRUE); + clutter_timeline_set_auto_reverse (timeline, TRUE); + + clutter_actor_animate_with_timeline (rectangle, CLUTTER_LINEAR, timeline, + "@constraints.path.offset", 1.0, + NULL); + + clutter_actor_show (stage); + + clutter_main (); + + return EXIT_SUCCESS; +} diff --git a/doc/cookbook/videos/animations-path.ogv b/doc/cookbook/videos/animations-path.ogv new file mode 100644 index 0000000000000000000000000000000000000000..13578c816b27a7016047b6c7b92bb1f471e6b116 GIT binary patch literal 39639 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�+;jrM^cd`0-zM5ZV+>b`xhZ9~|!V8I~ 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 SEQep-gRu5hnd-RcX#Wq=!|5*o literal 0 HcmV?d00001