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" 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 之数据存储的更多相关文章
- 关于Cocos2d-x的数据存储
Cocos2d-x对数据的存储没有用到数据库,但是有用到一个类似数据库的小型数据库,就是数据存储.存储后的数据用XML的文件格式保存在C:\Users\Administrator\AppData\Lo ...
- 【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术
一.引言 数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉人家不能保存关卡信息,你明天还得 ...
- cocos2d-x lua table数据存储
cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...
- cocos2d-x 数据存储
这一章中,我们从一个小小的金币数入手,讨论了数据持久化的话题.我们尽量使用引擎提供的数据存储方法,以最大可能地适应跨平台需求.这里介绍的存储方法本质上都是基于 XML 的,对于 1 MB 以下的存储规 ...
- Cocos2d-x手游技术分享(1)-【天天打蚊子】数据存储与音效篇
前言: 手游项目<天天打蚊子>终于上线,特地写几篇技术分享文章,分享一下其中使用到的技术,其中使用cocos2d-x引擎,首选平台iOS,也请有iPhone或者iPad的朋友帮忙下载好评. ...
- cocos2dx基础篇(18) 数据存储CCUserDefault
在cocos2dx中提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用.它支持五种数据bool.int.float.double.string的存储. [3.x] ...
- cocos2dx 音效 粒子 数据存储
1.音效 引入头文件 #include "simpleAudioEngine.h" 命名空间 using namespace CocosDenshion; //创建一个背景 Siz ...
- 关于Cocos2d-x中数据的存储提取和类型转换
1.获得存储在UserDefault中的变量,但是获得的变量是一个String类型的值,要用atoi函数转换为整型,但是atoi函数的传递参数是一个char*类型的值,所以用_Score.c_str( ...
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
随机推荐
- CAD使用SetxDataDouble写数据(com接口)
主要用到函数说明: MxDrawEntity::SetxDataDouble 写一个Double扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据 ...
- IIS部署SSL证书后提示不可信的解决方案
IIS部署SSL证书后提示不可信的解决方案 本帖最后由 wosign-support3 于 2015-7-17 17:18 编辑 第一步:打开mmc——点击文件——添加删除管理单元——证书——计算 ...
- PHP生成文档,并把数据加入文档的小案例
PHP生成文档,可以利用file_put_contents($filename, $data),其中$filename表示文档名,$data表示需要放入的数据, 若存放的是数组,这还需要使用seria ...
- JAVA基础——数据流
DataInputStream 类和DataOutputStream 类 在前面的学习中,我们知道数据流处理的数据都是指字节或字节数组,但实际上很多时候不是这样的,它需要数据流能直接读.写各种各样的j ...
- DHCP和PXE
继续学习,Let's go!DHCP和PXE都是什么呢?如果非科班出身,可能一脸懵逼,好多东西需要去学习了,真的,继续学吧,付出不一定会有回报,不付出肯定就是等死了,呵呵! 一.DHCP 真正需要手动 ...
- oracle获取排序后的第一条信息
查询表table1里字段id小于10的所有数据,并且让数据根据id降序排列,然后得到第一条数据 select * from (select * from table1 where id<10 o ...
- vue 组件用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- swiper 3D 覆盖流的使用方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- linux 服务脚本
#!/bin/bash # # chkconfig: # description: my_SERVICE_NAME is a my Service # # common function . /etc ...
- 记一次被面试的final问题
---- 前言 今天面试被问到了,我们都知道final修饰的东西是不可变的,那么是值不可变还是其地址不可变?一脸懵逼,回来查阅一番,总结一下 --- final与数据 在日常行为下,一般数据指的都是基 ...