今天我们来看cocos2dX里面的数据存储类, CCUserDefault, 如今的游戏基本都会把用户信息保存下来, 以便于再次进入游戏的时候读取, 为了方便起见,有时我们也能够用CCUserDefault来存储金币数目这样的简单的数据项, 当然, 大型数据还是建议使用数据库

闲话不多说, 我们来看看cocos2dX为我们准备了哪些函数:

setBoolForKey( 键值, 值);            //设置一个bool值
setStringForKey( 键值, 值);         //设置一个string值
setDoubleForKey( 键值, 值);        //设置一个double值
setFloatForKey( 键值, 值);           //设置一个float值
setIntegerForKey( 键值, 值);        //设置一个int值

getBoolForKey( 键值);    //读取一个bool值 
getStringForKey( 键值);  //读取一个string值
getDoubleForKey( 键值);//读取一个double值
getFloatForKey( 键值);    //读取一个float值
getIntegerForKey( 键值); //读取一个int值
getBoolForKey( 键值, 默认值);    //读取一个bool值
getStringForKey( 键值, 默认值);  //读取一个string值
getDoubleForKey( 键值, 默认值);//读取一个double值
getFloatForKey( 键值, 默认值);    //读取一个float值
getIntegerForKey( 键值, 默认值); //读取一个int值
flush();                                              //保存到文件

话说函数也不是非常多啊, 五种类型, set写入, get取出, 非常明显的哈希表结构, Key-Valua, Key索引Value的值,

我们先来来写写代码:

   CCLabelTTF* ttf = CCLabelTTF::create( "null", "Arial", 32);ttf->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));addChild( ttf, 0, 101);if ( CCUserDefault::sharedUserDefault()->getBoolForKey( "flag", false)){//有数据std::string str = CCUserDefault::sharedUserDefault()->getStringForKey( "str", "null");   //取出stringttf->setString( str.c_str());  //将字符串的标题设为str} else{//没有数据CCUserDefault::sharedUserDefault()->setStringForKey( "str", "now, hava data");    //写入字符串CCUserDefault::sharedUserDefault()->setBoolForKey( "flag", true);       //写入boolCCUserDefault::sharedUserDefault()->flush();     //将数据存入xml里面, 只是如今貌似能够不加也能够}

我们来看看第一次执行的效果:

第二次执行:

我们再到项目里面的Debug.win32以下看看, 是不是多了一个UserDefault.xml

我们打开这个文件看看:

非常熟悉吧, 有两个数据:

key: str<====>valua:now, hava data

key:flag<====>valua:true

只是CCUserDefault给我们提供的存储方式是明文存储, 非常easy被其它人从外部改动, 所以我们存入xml的时候最好是加密存储, 所以为了防止玩家改动数据, 我们也写个简单的加密解密函数:

在头文件中面定义两个函数:

void encode(std::string &str);void decode(std::string &str);

实现他们, 这个, 我没有研究过加密解密算法, 所以就来个最简单的:

//加密
void HelloWorld::encode(std::string &str)
{  for(int i = 0; i < str.length(); i++) {  int ch = str[i];  ch = ch ^ 1;  str[i] = ch;  }
}  //解密
void HelloWorld::decode(std::string &str)
{  for(int i = 0; i < str.length(); i++) {  int ch = str[i];  ch = ch ^ 1;  str[i] = ch;  }
}  

使用一下, 看看效果先:

( 旁白: 感觉怎么没有区别呢? 又忽悠我们?), 别急嘛, 我们看看XML文件:

看看, 你能看懂吗?

好了, 今天就到这里, 我发现近期的东西会不会是越来越简单了啊, 过段时间给来点有难度的

转载于:https://www.cnblogs.com/jhcelue/p/7137826.html

cocos2dX 之数据存储相关推荐

  1. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

  2. mysql修改路径报错_mysql修改数据存储路径报错处理

    Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 解决?: >>> vim ...

  3. 英特尔 QLC 3D NAND 数据存储

    英特尔 QLC 3D NAND 数据存储 NAND是什么 由于SSD固态硬盘的普及,NAND这个词逐渐进入用户们的视线.许多厂商都在产品宣传中提到3D NAND颗粒等词汇,对于普通用户来讲,完全不知道 ...

  4. Android的数据存储方式

    1.Shared Preferences 2.文件存储数据 3.数据库 4.Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数 ...

  5. mysql更改数据库数据存储目录_MySQL更改数据库数据存储目录

    MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤. 1:确认MySQL数据库存储目 ...

  6. AS3.0编程 So本地数据存储(“超级cookies”)--AS3:Local SharedObject

    Flash影片运行过程中,大多数的数据都存储于影片本身,一旦影片被关闭,这些数据也就从内存中被清除掉,下次运行时,数据将从头开始.若想存储数据或者让客户端的多个影片共享同一组数据,就要想办法把数据存储 ...

  7. Java中数据存储方式

    2019独角兽企业重金招聘Python工程师标准>>> 1. 寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限, ...

  8. IOS数据存储之文件沙盒存储

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...

  9. 华为云大数据存储的冗余方式是三副本_大数据入门:HDFS数据副本存放策略

    大数据处理当中,数据储存始终是一个重要的环节,从现阶段的市场现状来说,以Hadoop为首的大数据技术框架,仍然占据主流地位,而Hadoop的HDFS,在数据存储方面,仍然得到重用.今天的大数据入门分享 ...

最新文章

  1. 如何更优雅地对接第三方API
  2. 使用python画CDF
  3. NYOJ 20 吝啬的国度(深搜)
  4. (学)DEV在设计界面部分组件显示红叉并报错的问题
  5. SSM中使用Druid连接池
  6. Android Handler.removeCallbacksAndMessages(null)的作用
  7. Python3 爬虫学习笔记 C18【爬虫框架 pyspider — 深入理解】
  8. python idle是什么_下载下来的IDLE是个什么鬼
  9. Linux打包压缩.md
  10. 黑白群晖用做airplay一条命令实现USB声卡转音箱的网络播放(Docker-shairport-sync容器)
  11. 稀奇古怪--JAVA篇
  12. 微信小程序 + 腾讯位置服务获取全国城市列表
  13. win7休眠不断网的设置方法
  14. _kbhit函数详解
  15. 【时间函数】gettimeofday
  16. javaScript的console
  17. 扫一扫,一键生成微信个人数据报告
  18. 考研概率论与数理统计
  19. 俄罗斯游戏java源代码_Java俄罗斯方块游戏源代码JAVA游戏源码下载
  20. 新名词|什么是「电源」程序员?

热门文章

  1. Linux C 算法与数据结构 --二叉树
  2. 单硬盘上mac + win7双系统,GUID-GPT分区
  3. md /mdd /ml /mt/mtd
  4. Windows系统USB转CDC串口驱动限制说明
  5. [NodeJs] 如何获取项目的根路径?
  6. Taro+react开发(18)--定义变量值
  7. 前端学习(3132):react-hello-react之react中事件处理
  8. [css] 异步加载CSS的方式有哪些?
  9. [js] document.domain的作用是什么?它有什么限制?
  10. 工作269:uni--客流分析优化