cocos2dx 粒子plist

2015年03月02日 14:30 0 点赞 0 评论 更新于 2025-11-21 16:33

在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还支持 CCSizeCCRect 等类型的字符串转化,它们的转化方法以及在 .plist 中对应的字符串格式如下:

  • CCPoint:使用 CCPointFromString() 方法,字符串格式为 {x, y}
  • CCSize:使用 CCSizeFromString() 方法,字符串格式为 {w, h}
  • CCRect:使用 CCRectFromString() 方法(原文此处有误,应为 CCRectFromString),字符串格式为 {x, y, w, h}

应用场景

通过将游戏的初始数据放在 .plist 文件中,我们可以实现游戏数据和游戏逻辑的分离。当需要修改游戏初始数据时,只需修改 .plist 文件,而无需重新编译程序,这样可以提高开发效率和灵活性。

作者信息

boke

boke

共发布了 3994 篇文章