Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
clutter学习笔记五----多个 timeline--ClutterScore
社区开发
2053
views ·
0
replies ·
To
floor
Go
z85525006
deepin
2012-02-10 02:18
Author
这些资料不是自己编写出来,是我整理出来了的.只是作个笔记,自己也好翻查,大家也好查查.
先学习完这些,最近比较忙,后面在看clutter给的例子,好好的学习下,先把基础打牢吧!
clutter.Score 加入多个 clutter.Timeline,这些 timeline 可以同时触发,也可以依次触发。学习资料来源: Grouping Timelines in Score , Example 。
使用方法:先创建一个 ClutterScore,然后通过 clutter.score_append()将各个 timeline 加入。这个函数的第二个参数如果为 NULL,表示作为第一个 timeline 执行,可以同时又多个第一个 timeline,第二个参数也可以是某个 timeline,表明这个 timeline 在某个 timeline 后面依次执行。
这两种方式可以分别表述为并行和串行。假设我们有两个 timeline,间隔时间分别是她 t1 和 t2,他们都分别设置了 maker-reached 的触发,时间分别为 a1 和a2,他们也同时具有 new-frame 的帧刷新触发。
1.png
上图是串行,即依次执行的说明,一个循环的时间为作为 timeline 的时间总和,即 t1+t2+t3+......+tn,我们需要注意的是有效的 new-frame 时间,一个 timeline 的刷屏触发,只在其有效时间内。我们在 t1 的 new-frame 中设置的动态效果,会在 t2 开始的时候暂停,并在 t1 重新的时候继续执行。
2.png
上图是并行,即同时触发的例子,一个循环时间为 MAX(t1,t2,t3,......,tn),同样如果使用 new-frame
时,需要注意只在 timeline 自己有效的时间范围内。这一点必须强调。
通过并行和串行的两种方式的组合可以构造符合我们需求复制的 timeline 方式。不过根据编程思想,我们应尽量减少重复,力求简洁。通过增加复杂度来渲染自己编程能力是无知者无畏。
deepin.png
下面的例子。设置了两个 timeline,即 timeline1 和 timeliness2,他们的 new-frame
触发分别为旋转和平移一个 png 的图像。同时通过 mark-reached 的触发,将 timestamp 打印出来,来跟
踪他们的执行方式。
#!/usr/bin/env python
# coding:utf-8
import clutter
class App:
def __init__ (self):
self.stage_color = clutter.Color(0x00, 0x00, 0x00, 0xff)
self.stage = clutter.Stage()
self.stage.set_size(800, 300)
self.stage.set_color(self.stage_color)
self.stage.connect("destroy", clutter.main_quit)
self.rect = clutter.Texture("deepin.png")
self.rect.set_position(150, 150)
self.stage.add(self.rect)
#控制多个时间线
self.score = clutter.Score()
self.score.set_loop(True)
self.timeline1 = clutter.Timeline(5000)
self.timeline1.add_marker_at_time("my-mark", 1000)
self.timeline1.connect("new-frame", self.on_timeline_new_frame1)
self.timeline1.connect("marker-reached", self.on_timeline_marker_reached)
#并行
self.score.append(self.timeline1)
self.timeline2 = clutter.Timeline(6000)
self.timeline2.add_marker_at_time("timeline2", 2000)
self.timeline2.connect("new-frame", self.on_timeline_new_frame2)
self.timeline2.connect("marker-reached", self.on_timeline_marker_reached)
self.score.append(self.timeline2)
#串行
#self.score.append(self.timeline1, self.timeline2)
self.score.start()
self.step = 0
def run(self):
clutter.Actor.show_all(self.stage)
def on_timeline_marker_reached(self, timeline, marker_name, msecs_num):
print "marker %s reached: msec-num = %d" % (marker_name, msecs_num)
def on_timeline_new_frame1(self, timeline, frame_num):
self.step += 1.0
if self.step >= 360:
self.step = 0
self.rect.set_rotation( clutter.X_AXIS, self.step, 0, 50, 50)
#时间线2
def on_timeline_new_frame2(self, timeline, frame_num):
self.rect.move_by(0.4, 0)
a = App()
a.run()
clutter.main()
Copy the Code
Reply
Like 0
Favorite
View the author
All Replies
No replies yet
Please
sign
in first
New Thread
Popular Ranking
Change
[2024.12.31] deepin 23 Update Log
EZVIZ on Linux
Popular Events
More
先学习完这些,最近比较忙,后面在看clutter给的例子,好好的学习下,先把基础打牢吧!
clutter.Score 加入多个 clutter.Timeline,这些 timeline 可以同时触发,也可以依次触发。学习资料来源: Grouping Timelines in Score , Example 。
使用方法:先创建一个 ClutterScore,然后通过 clutter.score_append()将各个 timeline 加入。这个函数的第二个参数如果为 NULL,表示作为第一个 timeline 执行,可以同时又多个第一个 timeline,第二个参数也可以是某个 timeline,表明这个 timeline 在某个 timeline 后面依次执行。
这两种方式可以分别表述为并行和串行。假设我们有两个 timeline,间隔时间分别是她 t1 和 t2,他们都分别设置了 maker-reached 的触发,时间分别为 a1 和a2,他们也同时具有 new-frame 的帧刷新触发。
1.png
上图是串行,即依次执行的说明,一个循环的时间为作为 timeline 的时间总和,即 t1+t2+t3+......+tn,我们需要注意的是有效的 new-frame 时间,一个 timeline 的刷屏触发,只在其有效时间内。我们在 t1 的 new-frame 中设置的动态效果,会在 t2 开始的时候暂停,并在 t1 重新的时候继续执行。
2.png
上图是并行,即同时触发的例子,一个循环时间为 MAX(t1,t2,t3,......,tn),同样如果使用 new-frame
时,需要注意只在 timeline 自己有效的时间范围内。这一点必须强调。
通过并行和串行的两种方式的组合可以构造符合我们需求复制的 timeline 方式。不过根据编程思想,我们应尽量减少重复,力求简洁。通过增加复杂度来渲染自己编程能力是无知者无畏。
deepin.png
下面的例子。设置了两个 timeline,即 timeline1 和 timeliness2,他们的 new-frame
触发分别为旋转和平移一个 png 的图像。同时通过 mark-reached 的触发,将 timestamp 打印出来,来跟
踪他们的执行方式。