欢迎来到天天文库
浏览记录
ID:41008054
大小:17.06 KB
页数:8页
时间:2019-08-13
《使用Moblin进行应用程序开发——Clutter之动画》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、使用Moblin进行应用程序开发——Clutter之动画【IT168技术】正文开始之前先说几句别的。上月20号发布的MoblinV2Beta版中,Clutter的版本已经到了0.9,API与clutter0.8相比有了些变化,两者在API上已不兼容。鉴于pyclutter目前版本依然还是0.8,并且本系列博文更侧重于概念,因此所用的API一律基于clutter0.8。等clutter1.0正式版本发布后,我们再来看API的变化。 之前讲了一点有关Actor与Stage的内容,有了演员和舞台,接下来自然而然
2、就要上台表演,也就是这里所谓的动画了。在Clutter的动画中,有三个概念不得不提一下,他们是——Timeline,Alpha和Behaviour。 Timeline,即时间轴,也就是表演的时间段,这个概念我想大家应该都能明白,不多废话了。Behaviour,即行为,也就是表演的内容,比如放大、缩小、旋转、透明化等等均属于行为的范畴。最后讲讲Alpha,这个词挺难翻译的,如果放到表演上来理解,Alpha所指的应该是表演方式。比如同样是将某个Actor放大2倍,通过Alpha可以控制是采用线性放大,加速放大
3、还是减速放大等效果。Alpha其实是一个与总帧数和当前帧相关的函数,它的返回值是一个介于0和ALPHA_MAX之间的数,每当一个新的帧产生时都会调用Alpha函数,通过Alpha函数的返回值来确定当前帧的变化。用户可以自定义Alpha函数,也可以使用clutter提供的一些常用Alpha函数。 一般来说,基于clutter进行动画编程,代码结构通常是这样的: 1.创建时间轴ClutterTimeline 2.创建ClutterAlpha 3.创建ClutterBehaviour 4.将Behavi
4、our应用到Actor上 5.启动时间轴 目前Clutter提供的Behaviour包括有Bspline、Ellipse、Depth、Opacity、Path、Rotate和Scale。如果用户觉得这些Behaviour无法满足应用的需求,可以通过实现自定义Behaviour或者使用Timeline的new-frame事件来制作自定义的动画效果。 回到以前使用的demo程序——照片浏览器上来,这次要添加的功能是相片的正中显示。之前照片是以随机方位和角度铺在桌面上,现在通过双击照片,图片将以动画的形式移
5、至窗口正中并转至0度。单击正中显示照片将使图片以动画形式回到原先的位置。 代码如下: #!/usr/bin/python importsys importos importrandom importclutter STAGE_WIDTH=1024 STAGE_HEIGHT=768 Dragging=False DraggingPhoto=None Center=False pic_list=[] timeline=None alpha=None p_behavior=None
6、 r_behavior=None classPhoto: '''Photoclass''' border_width=10 def__init__(self,path,stage): self.stage=stage self.path=path self.x=0 self.y=0 self.degree=0 self.drag_start_x=0 self.drag_start_y=0 self.pic=clutter.Texture() self.pic.set_from_fi
7、le(path) self.width=self.pic.get_width()+2*Photo.border_width self.height=self.pic.get_height()+2*Photo.border_width self.frame=clutter.Rectangle() self.frame.set_color(clutter.Color(0xff,0xff,0xff,0xff)) self.frame.set_position(self.x,self.y) self.f
8、rame.set_size(self.width,self.height) self.group=clutter.Group() self.group.add(self.frame) self.group.add(self.pic) self.pic.set_position(Photo.border_width,Photo.border_width) self.stage.add(self.group
此文档下载收益归作者所有