cocos2d-x 读取配置文件plist

在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在cocos2d-x解析.plist方面相关的资料比较少,但本身也很简单,要解析.plist文件可以参考cocos2d-x类库中的CCSpriteFrameCache类和CCParticleSystem类,它主要是使用CCDictionary类来对.plist文件进行操作。

下面有一个.plist文件

[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEplistPUBLIC"-//Apple//DTdplIST1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plistversion="1.0">
  4. dictkey>level1</>bg_far_scene>pathstring>images/far_scene.png>pos>{358,309}>bg_near_scene>images/near_scene.png>{360,100}plist>
读取.plist文件代码如下:
[cpp] copy
    constchar*testPlistPath="BSPlistDatas\\test.plist";
  1. char*fullPath=CCFileUtils::sharedFileUtils()->fullPathFromrelativeFile("test.plist",testPlistPath);
  2. CCDictionary*plistDic=CCDictionary::createWithContentsOfFile(testPlistPath);
  3. CCDictionary*levelDic=dynamic_cast<CCDictionary*>(plistDic->objectForKey("level1"));
  4. CCDictionary*farScene=dynamic_cast<CCDictionary*>(levelDic->objectForKey("bg_far_scene"));
  5. CCString*farScenePath=dynamic_cast<CCString*>(farScene->objectForKey("path"));
  6. CCPointpoint=CCPointFromString(farScene->valueForKey("pos")->getCString());
  7. cclog("path=%s",farScenePath->getCString());
  8. 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对象。

copy
    CCPointpoint=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文件,而无需重新编译程序了,从而实现游戏数据和游戏逻辑的分离。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...