cocos2d-x 讀取.plist文件


轉自:http://blog.csdn.net/hgplan/article/details/8629904

在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}

CCSize:  CCSizeFromString();{w, h}

CCRect: CCSizeFromString();{x, y, w, h}

這樣我們2D游戲所初始化所需要的數據都基本上夠用了,可以嘗試將游戲的初始數據放在.plist中,然后修改調整數值就可以直接修改plist文件,而無需重新編譯程序了,從而實現游戲數據和游戲邏輯的分離。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM