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

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

一、引言

数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉人家不能保存关卡信息,你明天还得从头来再玩一遍。那玩家一定会掏出准备已久的西瓜刀~)

其实Cocos2d-x引擎早已为我们开发者封装好了多种数据存储的类或者方法,包括简单信息的存储,文件的读写,SQLite数据库和RAR格式的压缩文件的读取等等。(用心良苦啊!)其中大部分的存储功能被封装到了UserDefault类中。

二、数据存储

1.UserDefault类

UserDefault 是一个小型的数据管理类。你可以通过这个类保存并获得基本类型值的数据。 例如:setBoolForKey("played", true) 将在数据库中添加一个值为 true 的布尔型数据。 它的 key 是 "player"。可以通过 getBoolForKey("player") 获取这个数据。

UserDefault类提供了一些常用的方法用于读取和存储数据信息,如下表:

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

具体的参数及详细的说明可以在Cocos2d-x的UserDefaultAPI文档中查询(吐槽一句Cocos2d-x的文档真够差劲的,相比之下Egret的文档好很多。)

OK,下面我们写一个小例子,来看一下UserDefault这个类具体是怎么使用的,先上代码:

bool HelloWorld::init() { if ( !Layer::init() ) { return false; } auto* background = LayerColor::create(Color4B(255, 255, 255, 255)); addChild(background);     //创建一个菜单按钮 auto* readLabel = Label::create("read", "Arial", 56); readLabel->setColor(Color3B(0, 0, 0)); auto* pReadLabel = MenuItemLabel::create(readLabel, this, menu_selector(HelloWorld::readCallback)); auto* buttonReadLabel = Menu::create(pReadLabel, NULL); buttonReadLabel->setPosition(320, 260); addChild(buttonReadLabel); auto* saveLabel = Label::create("save", "Arial", 56); saveLabel->setColor(Color3B(0, 0, 0)); auto* pSaveLabel = MenuItemLabel::create(saveLabel, this, menu_selector(HelloWorld::saveCallback)); auto* buttonSaveLabel = Menu::create(pSaveLabel, NULL); buttonSaveLabel->setPosition(320, 100); addChild(buttonSaveLabel); UserDefault::sharedUserDefault()->setBoolForKey("isExisted",false); return true; } void HelloWorld::readCallback(Ref* pSender) { CCLOG("============================================================"); CCLOG("reading begin!");     //根据isExisted的值来判断,是否数据被写入 if (UserDefault::sharedUserDefault()->getBoolForKey("isExisted")) {       //读取键值为Int的内容并输出 int intVar = UserDefault::sharedUserDefault()->getIntegerForKey("int"); CCLOG("the int is:%d", intVar);       //读取键值为float的内容并输出       float floatVar = UserDefault::sharedUserDefault()->getFloatForKey("float"); CCLOG("the float is:%f", floatVar);       //读取键值为string的内容并输出 std::string str = UserDefault::sharedUserDefault()->getStringForKey("string"); CCLOG("the string is:%s", str); }     //如果isExisted的键值为false的话,说明信息没有被保存,不可用 else { CCLOG("not exist!"); } CCLOG("============================================================"); } void HelloWorld::saveCallback(Ref* pSender) { CCLOG("============================================================"); CCLOG("save begin!"); UserDefault::sharedUserDefault()->setIntegerForKey("int", 999); UserDefault::sharedUserDefault()->setFloatForKey("float", 3.1415926); UserDefault::sharedUserDefault()->setStringForKey("string", "this is a string!"); UserDefault::sharedUserDefault()->setBoolForKey("isExisted", true); CCLOG("saved file path is %s", UserDefault::sharedUserDefault()->getXMLFilePath()); CCLOG("============================================================"); }

程序运行起来以后可以看到read和save两个按钮,点击他们可以看到在控制台打印出来的信息,如下图:

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


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


可以看到,数据信息已经被成功的写入并且读取出来了,而且还打印了文件的存放路径。这种方式特别适合保存游戏进度和最高分、排行榜等内容比较少的数据。但是如果数据量比较大的时候就需要采取别的方式了,比如文件读写的方式。

用户喜欢...

CN0398开发板和ADuCM360_demo_cn0398开源软件包解决了土壤测量系统设

保持适当的土壤湿度和pH值是植物健康的基本要求,无论是用于大规模农业还是简单的家庭菜园。然而,为了测量这些土壤特性,开发人员需要设计出具有成本效益的高精度模拟信号链,能够将...


物联网原型开发使用简单的单板设计

物联网,特别是工业物联网(IIoT)不仅负责为许多业务部门创造变革性的影响,还负责实现嵌入式IIoT解决方案开发方式的根本转变。许多面临此类项目的工程师选择选择市售的单板计算机(...


Raspberry Pi智能语音助手应用程序的快速原型开发

语音助手已经迅速成为一个重要的产品功能,这要归功于流行的基于智能语音的产品,如Amazon Echo和Google Home。虽然语音服务提供商为开发人员提供了应用程序编程接口(API)支持,所以他们不...


如何选修开发工业物联网触摸屏

几乎每个嵌入式系统都需要能够在现场更新固件,以添加新功能或修复错误。但是,由于开发人员必须编写自己的引导加载程序或从第三方组件供应商处获得引导加载程序,所以固件字段更新可...


[原创] MicrochipCAN LIN CAN-FD汽车网络开发方案

Microchip公司的CAN LIN CAN-FD汽车网络开发板采用8位,16位和32位Microchip MCU系列,提供低成本模块化平台,用于CAN, LIN, CAN-FD网...


[原创] On Semi RSL10多协议无线系统级芯片(SoC)开发方案

On Semi公司的RSL10是超低功耗的多协议无线系统级芯片(SoC),采用ARMR CortexRM3处理器(48MHz)和LPDSP32 DSP核(音频CODEC),支持蓝牙...


Android开发者选项之GPU过度绘制

GPU过度绘制定义 如果你粉刷过一个房间或一所房子,就会知道给墙壁涂上颜色需要做大量的工作。假如你还要重新粉刷一次的话,第二次粉刷的颜色会覆盖住第一次的颜色,第一次的颜色就...


【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术

在上一篇博客《【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术》中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术。 一、弱...


[原创] NXP LPCXpresso54628低功耗ARM MCU开发方案

NXP公司的LPCXpresso54628是基于ARM Cortex-M4核的低功耗MCU,具有丰富外设,非常低功耗和增强的调试特性.ARM Cortex-M4 CPU采用3级...


游戏开发中的人工智能(十四):神经网络(1)

接上文 游戏开发中的人工智能(十三):不确定状态下的决策:贝叶斯技术 本文内容:“神经网络”技术让游戏具有学习和适应的能力。事实上,从决策判断到预测玩家的行为,都可以应用...


程序员开发辅助工具总结

工欲善其事,必先利其器。使用开发辅助工具将大大提高程序员的开发效率,以下推荐12个开发辅助工具供你选择: 1、Notepad++ Notepad++ 程序员必备的文本编辑器,软件小巧高效,支持27种编程...


游戏开发中的人工智能(十三):不确定状态下的决策:贝叶斯技术

接上文 游戏开发中的人工智能(十二):概率概论 本文内容:贝叶斯技术是概率技术,本章解释如何运用,以便在游戏中做决策并适应游戏。 不确定状态下的决策:贝叶斯技术 本章要介绍...


[原创] NXP i.MX 6UltraLitePICO入门板开发方案

NXP公司的i.MX 6UltraLite是高性能超高效率处理器系列,采用先进的单核ARM Cortex-A,运行速度最高支持528 MHz,包括一个集成的...


[原创] ST STM32L4R9I高性能超低功耗ARM MCU开发方案

ST公司的STM32L4R9I是高性能超低功耗MCU系列产品,基于Arm Cortex-M4 32位RISC核,工作频率高达120MHz,支持所有ARM单精度数据处理...


游戏开发中的人工智能(十一):规则式 AI

接上文 游戏开发中的人工智能(十):模糊逻辑 本文内容:技术上而言,有限状态机和模糊逻辑都落在基于规则的方法这个大伞之下。本章将谈这些方法,以及其他变化的方法。 本章我们要...


游戏开发中的人工智能(十二):概率概论

接上文 游戏开发中的人工智能(十一):规则式 AI 本文内容:游戏开发人员时常使用简单的概率,使游戏较难预测。这种简单的不可预测性让游戏开发人员可以拥有对游戏的实质性控制。本...