在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在网上搜索了一下发现关于这方面的资料好像不多,而且不够全面,所以自己研究了一下做个分享,plist文件的解析其实很简单,可以参考cocos2d-x类库中的CCSpriteFrameCache类和CCParticleSystem类,它主要是使用CCDictionary类来对.plist文件进行操作。比较复杂一点的里面会混有CCArray 的数据格式。比如下面这个:
上图中的结构是以 dict 开头解析方法如下:
--加载Plist文件
local musicDic = CCDictionary:createWithContentsOfFile("xxxx/xxxx.plist")
--按key名称获取数组中数据
local musicArray = musicDic:objectForKey("ForestPolka")
---获取数组元素数量
local count = musicArray:count()
-- 用两个表存储获数据
local keyboard = {}
local duration = {}
for i = 1, count do
--按索引获取数组中所有字典 [第一个位置为 0 ]
local dic = musicArray:objectAtIndex(i - 1)
--根据键获取对应的值
local key = dic:objectForKey("keyboard"):floatValue()
local time = dic:objectForKey("musicDuration"):floatValue()
--将解析出来的数据放入表中以便使用
table.insert(keyboard, key)
table.insert(duration, time)
end
如果文件中是以 <array> 开头的话就要把文件内容加载到 CCArray 的数据结构内存中:
加载的方法和 CCDictionary 是一样的:
local musicArr = CCArray:createWithContentsOfFile("xxx/xxx.plist")
接下来的数据和上面第一张图以<dict>开头结构是一样的,可以获取出数组的数量,这里只有一个,我们直接按索引取出这个 dict (第一个索引是0):
local dictionary = musicArr:objectAtIndex(0)
之后的方法完全一模一样:
--获取ForestPolka中的数组
local arr = dictionary:objectForKey("ForestPolka")
--数组元素数量
local count = arr:count()
local keyboard = {}
local duration = {}
for i = 1, count do
local dic = arr:objectAtIndex(i - 1)
local key = dic:objectForKey("keyboard"):floatValue()
local time = dic:objectForKey("musicDuration"):floatValue()
table.insert(keyboard, key)
table.insert(duration, time)
end
类似这些的文件解析过程都很简单,只要看清楚里面的数据结构,用对应的方法一层层剥开,就能获取到想要的数据。