cocos2dX 之数据存储
来源:互联网 发布:淘宝网美工培训 编辑:程序博客网 时间:2024/05/29 18:33
今天我们来看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给我们提供的存储方式是明文存储, 很容易被其他人从外部修改, 所以我们存入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文件:
看看, 你能看懂吗?
好了, 今天就到这里, 我发现最近的东西会不会是越来越简单了啊, 过段时间给来点有难度的
- cocos2dX 之数据存储
- Cocos2dx 3.1.1 之 数据存储
- cocos2dx-数据存储
- cocos2dx xml 数据存储
- cocos2dx:数据存储-UserDefault
- cocos2dx-数据存储
- [cocos2dx]数据存储 UserDefault
- cocos2dx lua 数据存储
- cocos2dx:数据存储-静态数据
- cocos2dx一路走来之<API学习:数据存储UserDefault>
- cocos2dx之UserDefault: 数据存储及加密 (上)
- cocos2dx数据存储 Userdefault数据存储实例
- quick cocos2dx 游戏数据存储
- cocos2dx UserDefault存储数据问题
- 二 cocos2dx 之 解析xml文件数据并在程序中调用,存储
- cocos2dx 玩转简单数据存储
- 【iOS-cocos2d-X 游戏开发之六】使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据编码!
- 【iOS-cocos2d-X 游戏开发之四】使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据编码
- poj The Clocks(暴搜)
- 设计下一代自动化测试系统
- 软考之路(6)——设计模式之工厂系列
- [基础语法]__typedef__struct__(c++)
- mysql操作日期的方法
- cocos2dX 之数据存储
- INI文件格式及其读写
- web获取单选按钮中的数据
- C语言--关于Mac OS X
- Vista/Win7 UAC兼容程序开发指南(***)
- 如何用php语言实现实时消息处理的后台守护进程
- Linux Multipath代码分析
- C语言学习笔记(五)指针
- NYOJ-65 另一种阶乘问题