在cocos2d-x中可以用.plist格式的檔案來儲存資料,它是XML檔案格式的一種,在cocos2d-x解析.plist方面相關的資料比較少,但本身也很簡單,要解析.plist檔案可以參考cocos2d-x類庫中的CCSpriteFrameCache類和CCParticleSystem類,它主要是使用CCDictionary類來對.plist檔案進行操作。
下面有一個.plist檔案:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>level1</key>
<dict>
<key>bg_far_scene</key>
<dict>
<key>path</key>
<string>images/far_scene.png</string>
<key>pos</key>
<string>{358, 309}</string>
</dict>
<key>bg_near_scene</key>
<dict>
<key>path</key>
<string>images/near_scene.png</string>
<key>pos</key>
<string>{360, 100}</string>
</dict>
</dict>
</dict>
</plist>
讀取.plist檔案的代碼如下:
const char* testPlistPath = "BSPlistDatas\\test.plist";
const char* fullPath = CCFileUtils::sharedFileUtils()->fullPathFromRelativeFile("test.plist", testPlistPath);
CCDictionary* plistDic = CCDictionary::createWithContentsOfFile(testPlistPath);
CCDictionary* levelDic = dynamic_cast<CCDictionary*>(plistDic->objectForKey("level1"));
CCDictionary* farScene = dynamic_cast<CCDictionary*>(levelDic->objectForKey("bg_far_scene"));
CCString* farScenePath = dynamic_cast<CCString*>(farScene->objectForKey("path"));
CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());
CCLog("path = %s", farScenePath->getCString());
CCLog("pos = %f, %f", point.x, point.y);
第一行是.plist檔案的相對路徑,通過CCFileUtils類獲得檔案中絕對路徑後,使用CCDictionary::createWithContensOfFile(filePath);将檔案中内容加載到CCDictionary資料結構的記憶體中,然後通過xxxForKey獲得相應的key下的value。
這裡需要注意的是,當在讀取'pos'的時候,它的值一個{x, y}的字元串,這是.plist檔案中的數組存儲規則,我們可以通過cocos2d-x提供函數api将這樣的字元串轉化為CCpoint對象。
CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());
上面這句話就是做了這樣的一個轉化的過程,同樣的cocos2d-x還支援CCSize、CCRect的字元串的轉化。他們轉化的方法以及在.plist中對應的字元串格式如下:
CCPoint: CCPointFromString();{x, y}