【IOS-COCOS2D-X 游戏开发之五】游戏存储之COCOS2DX自带CCUSERDEFAULT类详解;

简介:
本站文章均为  李华明Himi 原创,转载务必在明显处注明: 
转载自【黑米GameDev街区】 原文链接:  http://www.himigame.com/iphone-cocos2dx/653.html

本篇跟大家分享下Cocos2dX中的存储,其中也介绍些细节容易犯错的问题;

在Cocos2dX中提供了自带存储类:CCUserDefault  ,当然了这里Himi强调一点,如果你的数据量比较大,建议使用SQL存储比较适合,另外一点要注意的是,尽可能不要在Cocos2dX中使用与平台相关的api进行开发,例如Xcode使用Cocos2dX进行开发游戏时不小心使用了iOS的控件/组件在项目中,那么当移植到Android等平台的时候就肯定异常费劲,估计连正常运行都不可能,因为其他平台不可能正好有iOS的这些控件,即使有也肯定底层实现不一样!换句话而言,神马功能都使用Cocos2dX api实现,尽量都向X靠拢吧,所以这里的存储我也使用X自带的CCUserDefault;至少使用Cocos2dX自带的对于跨平台这一块肯定支持的比较好啦;

言归正传,先大致介绍一下这个类的API:

从以上可以一目了然CCUserDefault的使用和功能,哈希表结构,Key -Value,key索引Value值;

提供的存储都是些基础类型,bool,int,string,double,float,方法很容易懂:存储使用set ,获取使用get   !

那么最后static方法中可以看到CCUserDefault类留出了一个sharedUserDefault作为接口供开发者使用,那么大概介绍后,下面我们来写几段代码验证下:

这里要注意,    CCUserDefault中有个  flush()的函数,这个用来将数据写入xml文件中,也就是说当你使用setXX的一些函数后记得提交(调用一下flush函数)

OK,下面是控制台输入的结果:

最后一句验证了我们的存储没问题,那么我们现在验证是否真的存在xml中了,首先停止当前运行的项目,然后删除刚才代码替换如下代码:

然后重新运行此项目,观察控制台打印如下:

通过刚才的key->”key”,正常获取到“himi”这个字符串了,OK,监测没问题;

那么一般情况下我们会需要一个方法就是判定当前项目是否已经有存储数据的xml文件存在了,那么Himi这里说下,Cocos2dX默认源码中有这个方法,但是并没有提供给开发者使用,因为此函数被private私有了,此函数源码如下图所示:

       那么既然如此Himi这里就自定义了一个检测是否已存在数据xml的函数提供大家使用:(提醒:很多童鞋该说啦,为什么不直接修改源码将其public呢?!其实Himi也这么想,但是如果你后期使用了新的Cocos2dX的版本,或者同事机器的Cocos2dX并没有这么修改源码都会产生错误,反过来说,既然能很容易的写出一个判断的方法何必去动它呢,不是么?哈哈!)

备注:当存储数据的xml不存在的时候,你的第一次存储数据的时候默认会创建,路径在你的app下的documents,如下图所示:

 

 那么这里Himi强调一点!大家要注意setXX的函数的参数,例如以下这个函数:

setStringForKey (const char *pKey, const std::string &value)

第一个参数是const char*类型,不是string!!!!(Himi因为这个原因浪费不少时间,悲剧阿。)

Himi当时存储写了如下代码,造成错误,如下:

错误截图如下:(存储的key变成了路径。。。。《数据是Himi加密后的》)

   哎,郁闷,这里Himi犯错希望童鞋们不要再范此错误,之前Himi一直想找 itoa 找个函数,但是怎么都找不到!(c++  应该存在的整形转字符串),但是Cocos2dX中没有,并且最后Himi使用了与Cocos2dX引擎中的实现itoa的源码,发现如下:

Cocos2dX自带的这个CCUserDefault并不是加密的,而是明文并且是.xml格式的,所以后续Himi准备写一篇使用base64来进行加密的文章供大家参考;

本篇源码下载: “SaveDataForCocos2dx.zip”        下载地址:  http://vdisk.weibo.com/s/hq2Ys

 


相关文章
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1130 0
iOS:项目中无用类检测和无用图片检测汇总
|
设计模式 编译器 C++
iOS-底层原理 19:类扩展 与 关联对象 底层原理探索
iOS-底层原理 19:类扩展 与 关联对象 底层原理探索
116 0
iOS-底层原理 19:类扩展 与 关联对象 底层原理探索
|
存储 iOS开发
iOS-底层原理 18:类的加载(下)
iOS-底层原理 18:类的加载(下)
110 0
iOS-底层原理 18:类的加载(下)
|
存储 缓存 算法
iOS-底层原理 17:类的加载(上)
iOS-底层原理 17:类的加载(上)
172 0
iOS-底层原理 17:类的加载(上)
|
存储 C++
iOS-底层原理 09:类 & isa 经典面试题分析
iOS-底层原理 09:类 & isa 经典面试题分析
141 0
iOS-底层原理 09:类 & isa 经典面试题分析
|
存储 编译器 C++
iOS-底层原理 08:类 & 类结构分析
iOS-底层原理 08:类 & 类结构分析
117 0
iOS-底层原理 08:类 & 类结构分析
|
存储 设计模式 编译器
iOS-底层原理 07:isa与类关联的原理
iOS-底层原理 07:isa与类关联的原理
98 0
iOS-底层原理 07:isa与类关联的原理
|
iOS开发 C++
iOS 类的加载分析 (中)
我们都知道iOS的整体机制是懒加载, 也是就是使用到, 再去加载, 不使用就释放掉来节省内存.
78 0
|
Java 程序员 C语言
【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法(一)
【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法(一)
110 0
|
存储 对象存储 iOS开发
【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法(二)
【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法(二)
410 0