python写的一个生成cocos2dx的plist的小工具

来源:互联网 发布:linux finger 命令 编辑:程序博客网 时间:2024/06/05 13:28

最近研究了一下cocos2dx,想知道大师的杰作和自己的之前的设计差在哪。以后贴出自己的感悟,用来以后回顾。现在先贴出一个python小工具。自己写的,用来生成一个plist文件,因为手写plist文件实在是太麻烦了。

limit : anim.plist只支持format 2  而且  frame的plist也是只支持format2 .

目前写的test()函数是把一个spritesheets分割成为i*j个不同的小frame,同时自动生成的anim必须满足是同一行的属于一个anim动画。

比如三国志曹操传的人物资源就是。

如果想要做其他的改变,比如修改参数啥的,必须要输入大量的参数。很多都是默认的,只是一个模板而已,如果要修改,也是很简单就可以满足你的功能,因为主要的逻辑我以及表达清楚了,详细的看python代码。

参数 图像的宽。图像高。输入文件。等分的hn个,wn个。

import sysdef level_str(s , level) : ret = ""for i in range(level) : ret = ret + "\t"return ret + sdef write(f , s , level) : f.write(level_str(s , level))def print_dir(f , d , level) : write(f , "<dict>\n" , level)tl = level + 1for key in d : val = d[key] write(f , '<key>%s</key>\n' % (key) , tl)if(type(val) == type("a")) :write(f , "<string>%s</string>\n"%(val) , tl)elif (type(val) == type({})) : print_dir(f , val , tl)elif (type(val) == type([])) : print_array(f , val , tl)write(f , "</dict>\n" , level)def print_array(f , a , level) : tl = level + 1write(f , "<array>\n" , level)for val in a :if(type(val) == type("a")) :write(f , "<string>%s</string>\n"%(val) , tl)elif (type(val) == type({})) : print_dir(f , val , tl)elif (type(val) == type([])) :print_array(f , val , tl)write(f , "</array>\n" , level)def print_plist(outfile , root) : with open(outfile , "wb") as f : f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")f.write("<plist>\n")print_dir(f , root , 1)f.write("</plist>\n")#######################################################################upper is the tools #below is the tool_user######################################################################def generator_frame_directory(w , h , filename , hn , wn) : root = {} ;root["metadata"] = {"format":"2" , "size":"{%d,%d}"%(w,h) , "textureFileName":filename}frameDir = {}root["frames"] = frameDir####generator the frame data ; sw = w / wnsh = h / hnfor i in range(hn) : for j in range(wn) : tmpDir = {} noww = sw * jnowh = sh * itmpDir["frame"] = "{{%d,%d},{%d,%d}}" % (noww , nowh , sw , sh)tmpDir["offset"] = "{0,0}"tmpDir["rotated"] = "0"tmpDir["sourceSize"] = "{%d,%d}" % (sw , sh)frameDir[filename+str(i)+str(j)] = tmpDirprint_plist(filename+".plist" , root)return rootdef generator_animation_directory(filename , hn , wn) : root = {}root["properties"] = {"format":"2" , "spritesheets":[filename+".plist"]}animsDir = {}root["animations"] = animsDirfor i in range(hn) : _animDir = {"loops":"10" , "restoreOriginalFrame":filename+str(i)+"0" , "delayPerUnit":"0.3"}animsDir[filename+".anim"+str(i)] = _animDirframeName = []_animDir["frames"] = frameNamefor j in range(wn) : frameInfo = {"spriteframe":filename + str(i) + str(j) , "delayUnits":"1" , "notification":{}}frameName.append(frameInfo)print_plist(filename+".anim.plist" , root) return rootdef test() : generator_frame_directory(256,256,"knight.png",4,4)generator_animation_directory("knight.png" ,4 ,4)#####main functiontest()


原创粉丝点击