Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
clutter学习笔记五----多个 timeline--ClutterScore
社区开发
2150
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
keyring deepin password.. WTF... Not user friendly
UNABLE TO SYNC IN BRAZIL
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 打印出来,来跟
踪他们的执行方式。