来自:csdn qqTuBo

原文:

cocos2d-x 读取plist文件

最近在学cocos,有很多不错的游戏都是用cocos实现的,其实貌似捕鱼达人4月份流水账有3500W,好奇之下,看了看下捕鱼达人里的一些资源,顺便试着学习下plist的用法。
(接下来用到的资源都在捕鱼达人的APK内,直接解压了就能看到。)

我挑了FishActor-Small_hv.plist和它对应的png来看看下。

FishActor-Small_hv.plist内部的格式是这样的

<dict>
<key>frames</key>
<dict>
<key>btn_music.png</key>
<dict>
<key>frame</key>
<string>{{1, 46}, {31, 16}}</string>
<key>offset</key>
<string>{0,0}</string>
<key>rotated</key>
<false/>
<key>sourceColorRect</key>
<string>{{0, 0}, {31, 16}}</string>
<key>sourceSize</key>
<string>{31, 16}</string>
</dict>
</dict></dict>

结构是这样的:

文件名

frames

图片名

frame

可以通过这样获取object

CCRect PlistUtils::getRectFromPlist(const char* fileName,const char* key1,const char* key2,const char* key3){
CCDictionary* pDictionary=(CCDictionary*)CCDictionary::createWithContentsOfFile(fileName);
CCDictionary* content1=(CCDictionary*)pDictionary->objectForKey(key1);
CCDictionary* content2=(CCDictionary*)content1->objectForKey(key2);
CCString* object=(CCString*)content2->objectForKey(key3);
}

这样就能获取到需要的对象。接下来添加一个开始游戏的menu。首先对HelloWorld改造下,先在init里加入背景

CCSprite* background=CCSprite::create("ui_background_normal_hv.png");
background->setAnchorPoint(CCPointZero);
background->setPosition(CCPointZero);
addChild(background,0);

再加入开始游戏的按钮,开始游戏的贴图是通过,开始游戏的贴图在UI_GameMenuText_cn_hv.png和UI_GameMenuText_cn_hv.plist内首先获取开始游戏的CCRect

CCTexture2D* menusCache=CCTextureCache::sharedTextureCache()->addImage("UI_GameMenuText_cn_hv.png");
CCRect startRect=PlistUtils::getRectFromPlist("UI_GameMenuText_cn_hv.plist","frames","ui_2p_010.png","frame");
CCSprite* startSprite=CCSprite::createWithTexture(menusCache,startRect);
CCMenuItemSprite* pStartMenu=CCMenuItemSprite::create(startSprite,startSprite,this,menu_selector(GameMenuScence::menuStartCallback));
pStartMenu->setAnchorPoint(ccp(0.5f,0.5f));
pStartMenu->setPosition(ccp(size.width/2,size.height/2));
CCMenu* pMenus=CCMenu::create(pStartMenu,NULL);
pStartMenu->setPosition(CCPointZero);
addChild(pMenus,2);

效果图如下
http://download.csdn.net/detail/qqtubo/5557369

来自:蓝色記憶

原文:

cocos2d-x 2.1 -- 读取.plist文件

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

cocos2d-x中使用plist文件总结相关推荐

  1. MCR3516与MCR3512读写器在麒麟系统中info.plist文件冲突解决方案

    MCR3516与MCR3512读写器支持sim读卡器支持麒麟系统下运行,提供相关SDK开发包及代码案例,SDK文件中info.plist可能存在其他厂商提供的外设冲突了.本文将结合实际用于,提供MCR ...

  2. cocos2d 使用TexturePacker制作plist文件

    转自:https://blog.csdn.net/chiyiw/article/details/38170573 上一篇提到plist文件在cocos2d中的使用,那么如何制作plist文件呢? 一. ...

  3. Xcode中Info.plist文件各个键的作用说明【搜藏】

    Localiztion native development region --- CFBundleDevelopmentRegion 本地化相关,如果⽤户所在地没有相应的语言资源,则用这个key的v ...

  4. 把txt文件中的json字符串写到plist文件中

    - (void)json2Plist {NSString *filePath = [self applicationDocumentsDirectoryFileName:@"json&quo ...

  5. iPhone读取plist文件

    2019独角兽企业重金招聘Python工程师标准>>> 在xcode中读取plist文件非茶得简单: 读取一个名为recipes.plist的文件: // 变量定义 NSArray* ...

  6. Plist文件的创建与读写

    Plist文件(属性列表·Property List)是一种轻量级的存储文件,是使用XML格式以键值对方式进行存储的列表,通常用于用户设置或一些简单的数据存储. Plist文件的创建方式有两种:①Xc ...

  7. Cocos数据篇[3.4](4) ——plist文件操作

    [唠叨] 在Cocos中,plist文件 是非常常见的配置文件.它是特定格式的xml文件. 例如:小图打包成大图的纹理图片.制作粒子特效.帧动画等,都用到了plist文件作为配置文件. 本节要介绍的是 ...

  8. iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方...

    https://www.cnblogs.com/yk123/p/9340268.html // 加载自定义名称为Resources.bundle中对应images文件夹中的图片 // 思路:从main ...

  9. IOS之plist文件

    一.什么是plist文件: plist文件:Property List文件的简称,用于存放数组或者字典等的文本文件.IOS经常使用其存放用户信息,app信息等,如:info.plist文件. 二.pl ...

最新文章

  1. bootstrap 获取表格修改的结果_bootstrap-table前端修改后台传来的数据重新进行渲染...
  2. crontab 运行pyhon脚本
  3. android handler.removeCallbacksAndMessages(null)的使用
  4. ORACLE 限制特定IP访问数据库 访问白名单
  5. nodejs连接redis,redis服务器的地址格式应该怎么写
  6. eclipse配置代码提示
  7. mysql 自动 分库 备份_MySQL分库备份的方法
  8. Linux截图工具import使用说明
  9. 关于a+b共创建了几个对象的问题
  10. Advanced Installer 历史版本下载
  11. Django 实现用户认证set_Cookie
  12. 在Eclipse里自动导入相应包的类名的快捷键
  13. 计算机应用基础146jpg,计算机应用基础——复习题2.pdf
  14. 服务器安装julia_julia | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
  15. S32K144之芯片锁死解锁——关闭debug端口
  16. 解忧杂货铺----读后感
  17. 【已解决】Nginx基于多端口、多域名配置
  18. 虚幻4地形怎么增加层_腾讯首款虚幻4沙盘战略手游上线:全面3D化
  19. 在美国纽约哪里有西联汇款?本文提供美国纽约法拉盛西联汇款网点代理地址
  20. 【经理人领导力突破训练营】经理人必修课,如何成为成功的经理人?

热门文章

  1. 网络安全管理的“模拟人生”
  2. 阿里星专访丨星罡:因为期待,你需要更出色!
  3. 【VS Code配置matlab】手把手教学,matlab也能自动补全+瞬间启动+代码整理!
  4. Android自动化测试01-环境安装连接问题及解决
  5. PHP 对象 多态性
  6. c语言求行列式的值原理,新手作品:行列式计算C语言版
  7. 轨迹分析_解析几何中的轨迹问题中经典问题,有详细分析及其解答
  8. ISE_FIFO_IP核接口测试(二)
  9. java 获取密码框密码,获得Windows下的密码框密码--编程学习网
  10. MongoDB副本集学习(一):概述和环境搭建