cocos2dx 粒子plist
在Cocos2d-x开发中,我们可以使用 .plist 格式的文件来保存数据。.plist 文件是XML文件格式的一种,不过在Cocos2d-x中解析 .plist 文件的相关资料相对较少。实际上,解析过程并不复杂,我们可以参考Cocos2d-x类库中的 CCSpriteFrameCache 类和 CCParticleSystem 类,它们主要使用 CCDictionary 类来对 .plist 文件进行操作。
示例 .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 文件的代码
以下是读取上述 .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 类的 fullPathFromRelativeFile 方法获得文件的绝对路径。然后,使用 CCDictionary::createWithContentsOfFile(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:使用
CCRectFromString()方法(原文此处有误,应为CCRectFromString),字符串格式为{x, y, w, h}。
应用场景
通过将游戏的初始数据放在 .plist 文件中,我们可以实现游戏数据和游戏逻辑的分离。当需要修改游戏初始数据时,只需修改 .plist 文件,而无需重新编译程序,这样可以提高开发效率和灵活性。