cocos 2dx

cocos2d-x中 关于.plist文件的解析

2016-06-05  本文已影响495人  invalid_name

在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在网上搜索了一下发现关于这方面的资料好像不多,而且不够全面,所以自己研究了一下做个分享,plist文件的解析其实很简单,可以参考cocos2d-x类库中的CCSpriteFrameCache类和CCParticleSystem类,它主要是使用CCDictionary类来对.plist文件进行操作。比较复杂一点的里面会混有CCArray 的数据格式。比如下面这个:

Paste_Image.png

上图中的结构是以 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 的数据结构内存中:

Paste_Image.png

加载的方法和 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

类似这些的文件解析过程都很简单,只要看清楚里面的数据结构,用对应的方法一层层剥开,就能获取到想要的数据。

上一篇下一篇

猜你喜欢

热点阅读