本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010

一般游戏中都需要记录玩家数据,便于玩家下次登录时能够接着上次的游戏记录继续游戏。这样一来就需要我们在

开发时对玩家数据进行存档与读档。对于游戏数据的存储,在不同手机操作系统下都有自己的存储方式,例如常见的

SQLite等,在Cocos2D-X引擎中考虑到跨平台性,它也为开发者提供了跨平台的存储相关类CCUserDefault,那么这

一期我们就一起来学习如何使用Cocos2D-X提供的CCUserDefault。

一、游戏数据存储

由于CCUserDefault的函数都是静态调用,是不需要创建其对象的,所以下面我们一起来看看CCUserDefault的一

些常用函数。

<1> setBoolForKey(const char * pKey,bool value)

作用:保存一个bool类型数据。

参数1:key。

参数2:value。

<2> setDoubleForKey(const char * pKey,double value)

作用:保存一个double类型数据。

参数1:key。

参数2:value。

<3> setFloatForKey(const char * pKey,float value)

作用:保存一个float类型数据。

参数1:key。

参数2:value。

<4> setIntegerForKey(const char * pKey,int value)

作用:保存一个int类型数据。

参数1:key。

参数2:value。

<5> setStringForKey(const char * pKey,string & value)

作用:保存一个string类型数据。

参数1:key。

参数2:value。

<6> bool getBoolForKey(const char * pKey,bool defaultValue)

作用:获取存储一个bool类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<7> bool getDoubleForKey(const char * pKey,double defaultValue)

作用:获取存储一个double类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<8> bool getFloatForKey(const char * pKey,float defaultValue)

作用:获取存储一个float类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<9> bool getIntegerForKey(const char * pKey,int defaultValue)

作用:获取存储一个int类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<10> bool getStringForKey(const char * pKey,string & defaultValue)

作用:获取存储一个string类型数据。

参数1:key。

参数2:当key对应的数据不存在时,默认返回的值。

<11> bool flush()

作用:提交数据,将数据存入文件中。

通过学习CCUserDefault提供的函数后,我们可以看出这些函数的使用方法很简单,但是在使用时需要提醒大家注意两点:

<1> 不论是存储了一个还是多个支持的数据类型后,都必须调用flush()函数,当flush()被调用后,你之前存储的数据

才会真正保存到存储文件中。

<2> 使用CCUserDefault的getXXX函数时,应尽可能传入一个默认值(第2个参数),以免获取到空数据造成程序异

常等。

二、数据存储实例

1、首先新建Cocos2D-X项目,取名为“MyDataSave01”,然后在HelloWorldScene.cpp文件的init函数中添加如下所

示代码。

bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init()); CCLabelTTF *ttf = CCLabelTTF::create("", "Helvetica", 23);
ttf->setPosition(ccp(240,160));
addChild(ttf); if(CCUserDefault::sharedUserDefault()->getBoolForKey("bool",false)){
ttf->setString("hava data , start read data"); //Load
bool iBool = CCUserDefault::sharedUserDefault()->getBoolForKey("bool",false);
double iDouble = CCUserDefault::sharedUserDefault()->getDoubleForKey("double",0.0);
float iFloat = CCUserDefault::sharedUserDefault()->getFloatForKey("float",0.0);
int iInt = CCUserDefault::sharedUserDefault()->getIntegerForKey("int",0);
std::string iString = CCUserDefault::sharedUserDefault()->getStringForKey("string",""); }else{
ttf->setString("not hava data , start save data"); CCUserDefault::sharedUserDefault()->setBoolForKey("bool", true);
CCUserDefault::sharedUserDefault()->setDoubleForKey("double", 9.22);
CCUserDefault::sharedUserDefault()->setFloatForKey("float", 8.23);
CCUserDefault::sharedUserDefault()->setIntegerForKey("int", 23);
CCUserDefault::sharedUserDefault()->setStringForKey("string", "Himi");
//提交
CCUserDefault::sharedUserDefault()->flush();
} bRet = true;
} while (0); return bRet;
}

2、项目效果图。

<1> 第一次运行项目。

<2> 第二次运行项目。

源码下载地址

【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)的更多相关文章

  1. 【Cocos2d-X开发学习笔记】第30期:游戏中数据的存储(下)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.对数据进行编解码 在上一期中,我们使用了CC ...

  2. 基于.NET的CAD二次开发学习笔记二:AutoCAD .NET中的对象

    1.CAD对象:一个CAD文件(DWG文件)即对应一个数据库,数据库中的所有组成部分,看的见(包括点.多段线.文字.圆等)和看不见(图层.线型.颜色等)的都是对象,数据库本身也是一个对象. 直线.圆弧 ...

  3. 【Android开发学习笔记】【第七课】五大布局-上

    概念 Android程序各式各样,依靠的就是布局,先来看看布局都是怎么来的: 白色部分就是我们经常用的几种布局,主要说说介绍下面五大布局 FrameLayout AbsoluteLayout Line ...

  4. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  5. Flutter学习笔记(29)--Flutter如何与native进行通信

    如需转载,请注明出处:Flutter学习笔记(29)--Flutter如何与native进行通信 前言:在我们开发Flutter项目的时候,难免会遇到需要调用native api或者是其他的情况,这时 ...

  6. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  7. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  8. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  9. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

随机推荐

  1. Linux内存点滴:用户进程内存空间

    原文出处:PerfGeeks 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的.VIRT , Virtual Image (kb)RES, Residen ...

  2. Linux ./configure && make && make install 编译安装和卸载

    正常的编译安装/卸载: 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install).   configure文件是一个可执行的脚本文件,它有很多选项, ...

  3. Ueditor之SAE移植

    新浪SAE环境下使用UEditor http://www.cnblogs.com/zjzhome/p/3815460.html?utm_source=tuicool 在SAE上使用Ueditor的图片 ...

  4. Why your Games are Unfinished, and What To Do About It (转)

    So, you've got a new game idea, and it's going to change what everyone knows about the genre! Great! ...

  5. cloudera-scm-server ip改了怎么办了

    1.vi /etc/cloudera-scm-agent/config.ini #改下ip 2.manager 老只看到一个主机 rm -f /var/lib/cloudera-scm-agent/u ...

  6. Ruby自学笔记(一)— 基本概况

    之前一直想要多看看RESTful Service相关的东西,找到一本相关的书,但是里面的代码都是用Ruby写的,虽然知道编程语言都是类似的,但是看到一些陌生的语法,还是有些摸不着头脑,所以最近终于下定 ...

  7. event.preventDefault和恢复元素默认事件

    写页面事件的时候,有的时候需要用event.preventDefault取消原有的事件后进行重写,这个大家应该都知道. 那么怎么在取消默认事件后再恢复呢. 解绑我们自定义的事件就好了. 以Jquery ...

  8. Infinite Scroll–无限分页

    一.前言 现在有很多网站都有这样的交互 1.当你往下浏览页面时,页面会自动去异步加载数据. 无限分页效果 infinite scroll 效果图 –ifxoxo.com 2.在页面下方有一个“点击加载 ...

  9. C#程序设计基础——运算符与表达式

    运算符就是完成操作的一系列符号,它主要包括算术运算符.赋值运算符.关系运算符.逻辑运算符.条件运算.位操作运算符和字符串运算符. 表达式就是运算符和操作数的组合,如a*b+1-c.表达式主要包括算术表 ...

  10. Delphi重载,覆盖,多态

    一.override 重载 type TFigure = class procedure Draw; virtual;//(我的理解是)父类中可以使用父类的,子类中使用子类的.与“四”是有区别的. e ...