在cocos2d-x中可以用.plist格式的文件來(lái)保存數(shù)據(jù)植兰,它是XML文件格式的一種,在網(wǎng)上搜索了一下發(fā)現(xiàn)關(guān)于這方面的資料好像不多废境,而且不夠全面筒繁,所以自己研究了一下做個(gè)分享,plist文件的解析其實(shí)很簡(jiǎn)單驮宴,可以參考cocos2d-x類庫(kù)中的CCSpriteFrameCache類和CCParticleSystem類堵泽,它主要是使用CCDictionary類來(lái)對(duì).plist文件進(jìn)行操作。比較復(fù)雜一點(diǎn)的里面會(huì)混有CCArray 的數(shù)據(jù)格式迎罗。比如下面這個(gè):
上圖中的結(jié)構(gòu)是以 dict 開(kāi)頭解析方法如下:
--加載Plist文件
local musicDic = CCDictionary:createWithContentsOfFile("xxxx/xxxx.plist")
--按key名稱獲取數(shù)組中數(shù)據(jù)
local musicArray = musicDic:objectForKey("ForestPolka")
---獲取數(shù)組元素?cái)?shù)量
local count = musicArray:count()
-- 用兩個(gè)表存儲(chǔ)獲數(shù)據(jù)
local keyboard = {}
local duration = {}
for i = 1, count do
--按索引獲取數(shù)組中所有字典 [第一個(gè)位置為 0 ]
local dic = musicArray:objectAtIndex(i - 1)
--根據(jù)鍵獲取對(duì)應(yīng)的值
local key = dic:objectForKey("keyboard"):floatValue()
local time = dic:objectForKey("musicDuration"):floatValue()
--將解析出來(lái)的數(shù)據(jù)放入表中以便使用
table.insert(keyboard, key)
table.insert(duration, time)
end
如果文件中是以 <array> 開(kāi)頭的話就要把文件內(nèi)容加載到 CCArray 的數(shù)據(jù)結(jié)構(gòu)內(nèi)存中:
加載的方法和 CCDictionary 是一樣的:
local musicArr = CCArray:createWithContentsOfFile("xxx/xxx.plist")
接下來(lái)的數(shù)據(jù)和上面第一張圖以<dict>開(kāi)頭結(jié)構(gòu)是一樣的,可以獲取出數(shù)組的數(shù)量钻蔑,這里只有一個(gè),我們直接按索引取出這個(gè) dict (第一個(gè)索引是0):
local dictionary = musicArr:objectAtIndex(0)
之后的方法完全一模一樣:
--獲取ForestPolka中的數(shù)組
local arr = dictionary:objectForKey("ForestPolka")
--數(shù)組元素?cái)?shù)量
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
類似這些的文件解析過(guò)程都很簡(jiǎn)單可帽,只要看清楚里面的數(shù)據(jù)結(jié)構(gòu)映跟,用對(duì)應(yīng)的方法一層層剝開(kāi)扬虚,就能獲取到想要的數(shù)據(jù)。