本站文章均为李华明Himi原创,转载务必在明显处注明:
转载自【黑米GameDev街区】原文链接:http://www.himigame.com/iphone-cocos2dx/659.html
上一篇介绍了,如何使用Cocos2dX自带的CCUserDefault 存储游戏数据,那么Himi也提到此方式保存的为xml格式并且数据明文显示=。 =,这个对于我们开发者来说太暴漏了有木有! so~本篇Himi分享如何使用经典Base64算法对CCUserDefault进行数据编码!
OK,关于base64的介绍,Himi不再赘述,还不太熟悉的童鞋请点击以下连接阅读:
http://baike.baidu.com/view/469071.htm(百度百科的 base64详细解释)
如果对于Cocos2dX自带的CCUserDefault类不太熟悉的请点击如下连接:
【iOS-cocos2d-X 游戏开发之五】游戏存储之Cocos2dX自带CCUserDefault类详解;
对Base64有了基础认识后我们就开始进入正题,首先,我们针对Cocos2dX使用c++版的base64编码文件:
base64.h以及base64.cpp 文件下载导入项目中:
DataBase64Himi.zip(647 字节, 11 次)
然后Himi封装好了两个函数:(这里我们假设存储游戏金币)
首先.h中,定义枚举变量(备注1)
然后.h定义两个函数:(备注2)
1
2
3
4
5
|
void saveDataByKeyValue( int iKey, string sValue);
int loadDataByKey( int iKey);
|
最后.cpp中函数具体实现代码:(备注3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
void HelloWorld::saveDataByKeyValue( int iKey, string sValue){
char buffer[32];
sprintf (buffer, "%s%d" , "Himi" ,iKey);
CCLog( "----------存储" );
CCLog( "存储之前数据 key:index: Himi%i, value: %s " ,iKey,sValue.c_str());
string sKey = himiSaveData( reinterpret_cast < const unsigned char *>(sValue.c_str()), sValue.length());
CCLog( "存储编码后的数据 key:index: Himi%i, value: %s " ,iKey,sKey.c_str());
CCUserDefault::sharedUserDefault()->setStringForKey(buffer, sKey);
CCUserDefault::sharedUserDefault()->flush();
}
int HelloWorld::loadDataByKey( int iKey){
CCLog( "----------读取" );
char buffer[32];
sprintf (buffer, "%s%d" , "Himi" ,iKey);
string s = CCUserDefault::sharedUserDefault()->getStringForKey(buffer);
CCLog( "解码前的数据: %s " ,s.c_str());
string parseKey = himiParseData(s);
CCLog( "解码后的数据: %s " ,parseKey.c_str());
return atoi (parseKey.c_str());
}
|
OK,这里开始逐步解释一下:
首先说下备注2,这里定义的两个方法,第一个函数:
1
2
|
void saveDataByKeyValue( int iKey, string sValue);
|
其中第一个函数传入一个int值,为什么要这样,原因是这样方便与结合枚举变量(备注1)来进行存储,这样使用的时候非常简化你的代码和步骤;第二个函数是值,这里我封装成string,这样为了更好的结合我们的base64编码!这点在(备注3)中体现!
第二个函数:
1
2
|
int loadDataByKey( int iKey);
|
这个函数没什么好说的,传入的参数int,枚举变量即可!至于返回值是int 是方便程序中使用!
OK,那么备注3对于两个封装函数中的实现需要说明的有3点:
1. 将传入的int值(key)转化成char*类型,因为cocos2dx中并没有itoa这样的方法(原因上一篇有介绍),所以这里我采用 char buffer[32]; sprintf(buffer, “%s%d”, “Himi”,iKey); 方式进行将int转化char*类型;
2. 存储的时候我们步骤是:string值进行base64编码,然后存储到xml中;
3.将int转化string的时候我在枚举变量前加入”Himi”,大家不喜欢可以换成自己喜欢的,但是千万不要删除!因为一旦你删除掉,然后将存储后的形式为: <1>数据</1> 这样会造成你读取数据出错!
读取数据步骤:根据key读取xml的编码过的string,然后base64解码出原始值,最终atoi转化成int扔出!
这其中应该说没什么难于理解的,所以这里不再赘述了;
那么下面我们来看这两个函数如何使用:
1
2
3
4
5
|
this ->saveDataByKeyValue(DATA_GOLD, "10000" );
this ->loadDataByKey(DATA_GOLD);
|
代码是不是用起来很方面呢!哈哈,这就对啦,不能因为编码弄得乱78糟~OK,运行项目,控制台你将看到如下显示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Cocos2d: cocos2d: cocos2d-1.0.1-x-0.12.0
Cocos2d: cocos2d: GL_VENDOR: Imagination Technologies
Cocos2d: cocos2d: GL_RENDERER: PowerVR SGX 543
Cocos2d: cocos2d: GL_VERSION: OpenGL ES-CM 1.1 IMGSGX543-63.14.2
Cocos2d: cocos2d: GL_MAX_TEXTURE_SIZE: 4096
Cocos2d: cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16
Cocos2d: cocos2d: GL supports PVRTC: YES
Cocos2d: cocos2d: GL supports BGRA8888 textures: NO
Cocos2d: cocos2d: GL supports NPOT textures: YES
Cocos2d: cocos2d: GL supports discard_framebuffer: YES
Cocos2d: cocos2d: compiled with NPOT support: NO
Cocos2d: cocos2d: compiled with VBO support in TextureAtlas : NO
Cocos2d: 此项目已存在保存数据的xml文件
Cocos2d: 存储之前数据 key:index: 0, value: 10000
Cocos2d: 存储编码后的数据 key:index: 0, value: MTAwMDA=
Cocos2d: 解码前的数据: MTAwMDA=
Cocos2d: 解码后的数据: 10000
|
存储的文件内容截图如下:
OK,最后呢,我要说一点,虽然我们使用base64可以对数据进行编码,但是对于不懂程序的用户来说基本无法修改,但是对于稍微有了解base64编码的童鞋,那么直接可以在线解码你的这个编码,所以呢!最后Himi提醒大家,使用base64当中,大家可以书写一些算法结合base64来使用!这样即使明文也不怕,至于怎么做,Himi就不再多说了 哈哈!
本篇源码下载:
base64SaveDataForCocos2dx.zip(691 字节, 6 次)
分享到:
相关推荐
Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-扩展动作 http://blog.csdn.net/tt5267621/article/details/7626450
4、【cocos2d-x IOS游戏开发-捕鱼达人4】基本游戏框架 资源引用页: 5、【cocos2d-x IOS游戏开发-捕鱼达人5】C++中函数代理与信号插槽机制 资源引用页: 6、【cocos2d-x IOS游戏开发-捕鱼达人6】实现开始菜单 资源...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
Cocos2d-x 3.x游戏开发之旅教程及完整源码下载,使用最新cocos2d-x-3.14版本,在xcode7.3上已编译通过。 解决相关问题 1、解决源程序在高版本上无法编译问题 2、解决源程序中文注释部分,xcode上显示乱码问题 使用...
Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。
资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...
quick-cocos2d-x v3 是在 cocos2dx 3.x 的最新版本基础之上,移植了原来 quick-cocos2d-x 的核心框架、强大的 player 、丰富的示例等,并增加更多新的功能。 GitHub: https://github.com/dualface/v3quick
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-瞬时动作 http://blog.csdn.net/tt5267621/article/details/7624781
本书是《Cocos2d-x 游戏开发之旅》的升级版,修改了2.0版进阶到3.0版后的一些内容,新增了对CocoStudio、UI编辑器、Cocos2d-x 3.0新特性以及网络方面的知识点。主要介绍常用的API使用方式;介绍如何通过官方Demo获取...
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
9、【cocos2d-x IOS游戏开发-捕鱼达人9】鱼与动画 资源引用页: 10、【cocos2d-x IOS游戏开发-捕鱼达人10】鱼的产生和移动 资源引用页: 11、【cocos2d-x IOS游戏开发-捕鱼达人11】鱼的产生和移动:完善 资源引用页...
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-组合动作 http://blog.csdn.net/tt5267621/article/details/7626137
cn.cocos2d-x.org上quick-cocos2d-x初学者教程的代码与资源。原始资源100多M,这个仅保留资源与代码,不包含quick 3.3 Final的框架代码。下载后可以用quick 3.3 player直接玩。
Mac-OS-X-配置-Cocos2d-x-开发环境(iOS-和-Android).doc
cocos2d-x 3.x游戏开发实战光盘
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
资源为教学视频,有iOS基础熟悉XCode基本上不难学会,主要讲了一些Cocos2d游戏开发引擎中的一些具体调用
Cocos2d-x项目实战-射击类游戏-迷失航线,版本是Cocos2d-x-3.2