读书人

【精髓推荐】使用Moblin开发应用程序

发布时间: 2012-12-16 12:02:32 作者: rapoo

【精华推荐】使用Moblin开发应用程序 -- Clutter之Actor与Stage
微软Surface推出后,其中的图片与视频浏览器让人留下了比较深刻的印象。借着学习clutter的机会,我就打算做一个类似的图片浏览器。逛了clutter的网站后发现,clutter居然有python binding,于是决定使用pyclutter进行程序的开发。

第一个demo很简单:将一堆照片随意放在桌面上。J

这次会接触到2个有关clutter的概念:Actor和Stage。Actor和Stage,顾名思义,演员与舞台。没错,从本质上讲,clutter就是让一群2维的Actor在3维的Stage上表演。ClutterActor是所有Actor的父类,它是一个抽象类,提供一些Actor的通用的操作,如位移、旋转、缩放等。用户在编程中可以继承ClutterActor以开发自定义的Actor,也可以使用Clutter现有的一些Actor,如ClutterRectangle、ClutterTexture、ClutterCloneTexture、ClutterLabel、ClutterEntry等。同时,Clutter中也有些容器类,如ClutterStage和ClutterGroup,它们也是ClutterActor的子类。

在这个demo中,我们将会用到ClutterStage、ClutterGroup、ClutterRectangle和ClutterTexture。Demo的源代码如下:

#!/usr/bin/python



import sys

import os

import random



import clutter



STAGE_WIDTH=1024

STAGE_HEIGHT=768



class Photo:

border_width = 10



def __init__(self, path, stage):

self.stage = stage

self.path = path

self.x = 0

self.y = 0

self.degree = 0



self.pic = clutter.Texture()

self.pic.set_from_file(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.frame.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)





def set_random_position(self):

stage_width = self.stage.get_width()

stage_height = self.stage.get_height()

left = random.randint(0, stage_width)

top = random.randint(0, stage_height)

degree = random.randint(0, 360)



while left+self.width > stage_width:

left = random.randint(0, stage_width)



while top+self.height > stage_height:

top = random.randint(0, stage_height)



self.set_position(left, top, degree)





def set_position(self, x, y, degree):

self.x = x

self.y = y

self.degree = degree

self.group.set_position(x, y)

self.group.set_rotation(clutter.Z_AXIS, degree, (x+self.width)/2, (y+self.width)/2, 0)





def main(args):

if len(args) < 2:

print "The number of arguments is less than 2!"

return -1



path=args[1]

if not os.path.exists(path):

print path, "doesn't exist!"

return -1



stage = clutter.Stage()

stage.set_size(STAGE_WIDTH, STAGE_HEIGHT)

stage.set_color(clutter.Color(0x00, 0x00, 0x00, 0x00))





if not path.endswith(os.sep):



path+=os.sep



filelist = os.listdir(path)



for item in filelist:

pic=Photo(path+item, stage)

pic.set_random_position()



stage.show_all()

clutter.main()





if __name__ == '__main__':

sys.exit(main(sys.argv))



基本思路:用ClutterTexture装载图片,ClutterRectangle做相片的边框,通过ClutterGroup将两者组合,然后随机产生相片的位置与角度,通过ClutterActor类提供的方法进行设置。

Demo的使用方法:安装pyclutter先 :)。假设源代码保存为cimage.py,存放图片的目录为/home/images,则在命令行下执行#./cimage.py /home/images即可。

Demo的功能非常简单,希望通过这个Demo能使大家了解Actor与Stage的一些基本用法。


在Moblin中文站技术文章板块里面,有跟多有关技术的文章,欢迎您来阅读。技术文章版块链接:http://moblin.csdn.net/c_channelrecomm/more
[解决办法]
没有用过!学习一下!!!
[解决办法]
这是什么语言? 不懂!!!
[解决办法]
mark

读书人网 >MeeGo

热点推荐