cocos2dX 之数据存储

今天我们来看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" >

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

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

我们打开这个文件看看:

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

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" >

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

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

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

看看, 你能看懂吗?

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

时间: 2024-07-29 00:14:02

cocos2dX 之数据存储的相关文章

关于Cocos2d-x的数据存储

Cocos2d-x对数据的存储没有用到数据库,但是有用到一个类似数据库的小型数据库,就是数据存储.存储后的数据用XML的文件格式保存在C:\Users\Administrator\AppData\Local\的对应的目录下的.如果每次数据发生修改,该目录下的对应的XML文件里面的内容也会随之改变. 下面是C:\Users\Administrator\AppData\Local\UserDefault目录下的UserDefault.xml文件里面的具体内容,可以点编辑直接用文本文档打开. <?xm

cocos2d-x中的简单的数据存储

Cocos2d-x中的数据存储方式很多,下面我来简单的介绍几种,有说的不准确的地方,大家指出来吧,共同学习进步.谢谢! 首先介绍的是  UserDefault 这个类: //用userdefault进行数据存储 UserDefault::getInstance()->setStringForKey("testKey","testValue");//将String类型的数据存储起来 //读取上面写入的数据 std::string val = UserDefaul

cocos2d-x 之 简单数据存储——Userdefault

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 好久没有更新cocos2d-x的东西了,是在太忙,木有时间啊= =.. 1.基本概念 本篇文章是介绍,简单数据存储的Userdefault类,在API中: 就是存储一些简单的数据,比如声音的开启关闭,音效的开启关闭,最高分,金币数量的存储这些东西. 2.获取 这

cocos2dx基础篇(20)——数据存储CCUserDefault

[唠叨] 一个游戏怎么能没有游戏存档呢?在cocos2dx中也提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用. 它支持五种数据bool.int.float.double.string的存储. [致谢] http://gl.paea.cn/contents/252ac3e59bc18069.html [CCUserDefault] CCUserDefault类和之前讲的CCDirector.SimpleAudioEngine一样,都是采用单例模式. 可以通过sha

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

一.引言 数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉人家不能保存关卡信息,你明天还得从头来再玩一遍.那玩家一定会掏出准备已久的西瓜刀~) 其实Cocos2d-x引擎早已为我们开发者封装好了多种数据存储的类或者方法,包括简单信息的存储,文件的读写,SQLite数据库和RAR格式的压缩文件的读取等等.(用心良苦啊!)其中大部分的存储功能被封装到了UserDefault类中. 二.数据存

Cocos2d-x数据篇01:UserDefault数据存储

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2418 [前言] 一个游戏怎么能没有游戏存档呢?在Cocos2d-x中也提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用.它支持五种数据bool.int.float.double.string的存储. [Demo下载] UserDefault数据存储 [Cocos2d-x 3.x] (1)去掉 “CC” (2)获取单例:sharedUserDefault() 改为 get

cocos2dx 音效 粒子 数据存储

1.音效 引入头文件 #include "simpleAudioEngine.h" 命名空间 using namespace CocosDenshion; 1 //创建一个背景 2 Size winSize = Director::getInstance()->getWinSize(); 3 spriteTest = Sprite::create("bg.png"); 4 spriteTest->setPosition(Vec2(winSize.widt

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

1.获得存储在UserDefault中的变量,但是获得的变量是一个String类型的值,要用atoi函数转换为整型,但是atoi函数的传递参数是一个char*类型的值,所以用_Score.c_str()把String转化为Char* auto userdefault = UserDefault::getInstance(); auto _Score = userdefault->getStringForKey("RewardScore"); _rewardScore = atoi

数据存储-自定义Json串写入文件与XML格式读取数据

数据存储总的来说有三种方式 1>,数据库 2>,文件 3>,网络 在这里我介绍的是Json格式与XML格式的文件存储 先说说常用的文件存储数据的格式 1>,Json格式 2>,XML格式 这俩种格式我觉得区别的话应该是Json适合存储小数据,XML适合存储大数据 在cocos2d-x中,如果我们要用Json首先我们要先导入一个Json库:libjson demo如下: 要添加libjson头文件 创建Json格式的数据: 这里用JSONNode,定义一个父节点n,再定义一个节