今天我们来看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"); //取出string
ttf->setString( str.c_str()); //将字符串的标题设为str
}
else
{
//没有数据
CCUserDefault::sharedUserDefault()->setStringForKey( "str", "now, hava data"); //写入字符串
CCUserDefault::sharedUserDefault()->setBoolForKey( "flag", true); //写入bool
CCUserDefault::sharedUserDefault()->flush(); //将数据存入xml里面, 只是如今貌似能够不加也能够
}

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

第二次执行:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

我们打开这个文件看看:

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

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;
}
}

使用一下, 看看效果先:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

看看, 你能看懂吗?

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

cocos2dX 之数据存储的更多相关文章

  1. 关于Cocos2d-x的数据存储

    Cocos2d-x对数据的存储没有用到数据库,但是有用到一个类似数据库的小型数据库,就是数据存储.存储后的数据用XML的文件格式保存在C:\Users\Administrator\AppData\Lo ...

  2. 【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术

    一.引言 数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉人家不能保存关卡信息,你明天还得 ...

  3. cocos2d-x lua table数据存储

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

  4. cocos2d-x 数据存储

    这一章中,我们从一个小小的金币数入手,讨论了数据持久化的话题.我们尽量使用引擎提供的数据存储方法,以最大可能地适应跨平台需求.这里介绍的存储方法本质上都是基于 XML 的,对于 1 MB 以下的存储规 ...

  5. Cocos2d-x手游技术分享(1)-【天天打蚊子】数据存储与音效篇

    前言: 手游项目<天天打蚊子>终于上线,特地写几篇技术分享文章,分享一下其中使用到的技术,其中使用cocos2d-x引擎,首选平台iOS,也请有iPhone或者iPad的朋友帮忙下载好评. ...

  6. cocos2dx基础篇(18) 数据存储CCUserDefault

    在cocos2dx中提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用.它支持五种数据bool.int.float.double.string的存储. [3.x]     ...

  7. cocos2dx 音效 粒子 数据存储

    1.音效 引入头文件 #include "simpleAudioEngine.h" 命名空间 using namespace CocosDenshion; //创建一个背景 Siz ...

  8. 关于Cocos2d-x中数据的存储提取和类型转换

    1.获得存储在UserDefault中的变量,但是获得的变量是一个String类型的值,要用atoi函数转换为整型,但是atoi函数的传递参数是一个char*类型的值,所以用_Score.c_str( ...

  9. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

随机推荐

  1. Flask框架 之模版

    一.过滤器 safe:禁用转义: <p>{{ '<em>hello</em>' | safe }}</p> capitalize:把变量值的首字母转成大 ...

  2. CAD参数绘制多段线(com接口)

    多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定 ...

  3. 用数据集跑一个模型遇到bug如何解决

    自己在用fast rcnn和ssd跑自己数据集过程中都遇到了bug,fast rcnn中是loss下降但值较高,并且测试出来结果一直不对,ssd是loss从一开始到后面loss都一直为0. 遇到这种情 ...

  4. 初始化react项目

    react脚手架 npm install -g create-react-app 国内npm一般下载比较慢或者是常出现下载失败的情况,我们可以指定下载的仓库: npm install -g creat ...

  5. eclipse包分层

    方法很简单,如下图所示: 1.点击项目栏窗口的右上角的倒三角 2.选择Pachage Presentation(包呈现) 3.选择Hierarchical(分层)

  6. Linux从入门到适应(四):Ubuntu 16.04环境下,安装Nvidia驱动,cuda9.2和 cudnn

    在安装深度学习框架之前,cuda和cudnn是必须要提前安装的,现在按照流程而nvidia驱动的版本和cuda版本有这一些对应关系,所以需要按照版本进行安装,现在说一下如何安装: 1 安装nvidia ...

  7. CSU2188: Substring

    Description FST 是一名可怜的 ACMer,他很强,但是经常 fst,所以 rating 一直低迷. 但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有 ACMer ...

  8. 用PHP的GD库画五星红旗来玩玩

    1 header("Content-Type:image/jpeg"); $img=imagecreatetruecolor(999,667); $color=imagecolor ...

  9. 在Linux中CSV转换成XLSX

    在linux中,把csv文件转换成excel表格(xlsx或者xls) $ echo -e 'surname,name,age\nCarlo,Smith,23\nJohn,Doe,46\nJane,D ...

  10. buf.equals()

    buf.equals(otherBuffer) otherBuffer {Buffer} 返回:{Boolean} 返回一个 boolean 标识,无论 this 和 otherBuffer 是否具有 ...