【未完待续】一个基于AS3的plist库

一个基于AS3的plist库

本文并未全部完成,请耐心等待……


为了在 Sprite Sheet Editor 中加入 plist 格式的 metadata 支持,我在 f60k的as3plist库 基础上进行了修改,实现了我的 as3plist 库。

Plist格式的本质是XML文件。由于AS3内置XML支持,所以这个库的实现还是比较容易的。

Cocos2d-x 中大量使用了plist格式文件 ,因此实现plist的支持非常必要。目前我还没有找到软件能导入 plist+png 格式的 Sprite Sheet。大多数软件都只是能生成该格式。而 Sprite Sheet Editor 只需要稍加修改就能做到这一点。

由于精力有限,项目中的文档并不齐全且可能有错,直接编译 sample 会比较靠谱。

下面是范例代码: 继续阅读【未完待续】一个基于AS3的plist库

【未完待续】cocos2d-x中的plist文件格式详解

cocos2d-x中的plist文件格式详解

本文完成度90%,请耐心等待……


1. 什么是plist文件格式?

这是一种人类可读的串行化对象文件,由苹果公司发明,最早用于NeXTSTEP系统。详情看这里:Plist

cocos2d-x 从 cocos2d-iphone 发展而来,因此在引擎中大量使用了这种文件格式。

2. 如何编辑plist文件?

在 OS X 系统上,XCode 就可以直接打开和编辑plist文件。而在Windows上,我还没有找到可用的plist编辑软件。

当然,plist是基于XML的纯文本格式,随便找个文本编辑器就可以编辑了。

3. cocos2d-x在哪些地方使用了plist格式?

大致有这样几种: 继续阅读【未完待续】cocos2d-x中的plist文件格式详解

在Ant中替换尖括号

在Ant中替换尖括号

我使用 ReplaceRegexp 任务写了一段脚本替换XML的值:

<replaceregexp file="app.xml"
            match="<filename>"
            replace="name"
            encoding="UTF-8"/>

由于XML规范不允许在属性值中出现尖括号,Ant会报错:

d:\works\build\build.xml:70: 与元素类型 “null” 相关联的 “match” 属性值不能包含 ‘<‘ 字符。

把左右尖括号用他们的十六进制代码代替就可以解决这个问题:

<replaceregexp file="app.xml"
            match="\x3Cfilename\x3E"
            replace="name"
            encoding="UTF-8"/>

如果希望在替换的内容中也使用尖括号,需要一点点小技巧:

<replaceregexp file="app.xml"
            match="(\x3C)filename(\x3E)"
            replace="\1name\2"
            encoding="UTF-8"/>

当然,还有更简单的办法,就是使用 Replacereplacetoken

<replace file="app.xml" encoding="UTF-8">
    <replacetoken><![CDATA[<filename>]]></replacetoken>
    <replacevalue><![CDATA[<name>]]></replacevalue>
</replace>

使用Vim修复Sprite Sheet Editor 0.5.6版生成的错误XML文件

Sprite Sheet Editor 0.5.6有一个很重大的Bug,在保存metadata的时候,我将frame的ow/oh属性保存成了与w/h属性相同的值。

根据Sprite Sheet Editor修剪每帧中的空白区域的原理说明可以知道,对于剪切过空白的帧来说,ow和oh是还原原始帧大小的关键。如果这两个值出错,会导致无法取得动画的正确尺寸。

好在这个是可以回溯的。可以通过比较某个Label包含的所有帧的尺寸,通过ox/oy和w/h计算出每帧的实际尺寸,最大的那一个,就是该Label中的所有帧的统一ow/oh属性值。

使用这个方法,得到的实际值,甚至比原来通过Sprite Sheet Editor进行手工设定的值更小,也就是更加节省内存。

选择什么工具处理?AS3有强悍的E4X,JAVA和BASH也不错。但我正好想学习下Vim脚本,就用它了!

处理思路: 继续阅读使用Vim修复Sprite Sheet Editor 0.5.6版生成的错误XML文件

XmlToObject类

此类由 petex 制作,版权归原作者所有。

zrong(www.zengrong.net)修改,加入识别嵌套的xml文档的功能以及支持 type="object" 类型。

详情见 http://www.tweenpix.net/blog/index.php?2003/09/24/43-xmltoobject-as20-class

使用方法:

import cn.mediasky.utils.XmlToObject;
obj = new Object();
obj.onMade = function() {
  trace(this.main.url);
}
XmlToObject.loadData('test.xml', obj);

xml文件:

<root>
  <main type="object">
    <url type="string">http://localhost/abc.php</url> 
    <level type="number">3</level> 
  </main>
  <allowdomains type="array">'abc.net', 'abc.com', 'localhost'</allowdomains> 
</root>

类文件: 继续阅读XmlToObject类