Cocos2d-X游戏开发中的数据存储之CCUserDefault

    在游戏中通常需要保存数据,常见的数据如玩家账号信息一般由服务端采用SQL等技术保存在数据库中。对于某些数据量较小且使用次数较少的数据,可以保存在本地文件中。cocos2d-x引擎为开发者提供了数据存储类CCUserDefault,该类支持跨平台使用,使用比较方便。

CCUserDefault支持boolintfloatdouble以及string 5种类型的数据保存,各种数据保存的实现方式如下:

bool    getBoolForKey(const char* pKey);
bool    getBoolForKey(const char* pKey, bool defaultValue);

int     getIntegerForKey(const char* pKey);
int     getIntegerForKey(const char* pKey, int defaultValue);

float    getFloatForKey(const char* pKey);
float    getFloatForKey(const char* pKey, float defaultValue);

double  getDoubleForKey(const char* pKey);double  getDoubleForKey(const char* pKey, double defaultValue);

std::string getStringForKey(const char* pKey);
std::string getStringForKey(const char* pKey, const std::string & defaultValue);

    CCUserDefault将数据以XML格式保存在本地文件中,通过TinyXML2进行数据解析。xml文件本质是一个小型的数据库,因此,可以像操作数据那样,实现对xml文件的增删查改。CCUserDefault首先创建一个XMLDocument类型的文件,然后将keyvalue写入该文件,并保存,即可实现数据的存储。

    以保存游戏中玩家是否点击了消息查看按钮为例,说明CCUserDefault在游戏中的应用。通常游戏推送给玩家的消息存放在消息列表中,如果玩家未点击消息列表,可能忽略该消息。因此需要在界面上增加提示。如果玩家点击消息按钮查看之后,就不再需要提示了,如果通过游戏内的变量标识,玩家退出游戏重新进入之后,该变量将会重置,达不到效果。因此,这里可以采用CCUserDefault中的setBoolForKey() / getBoolForKey()函数保存是否点击的标识。其实现过程如下:


1. 初始化点击消息按钮变量的key

在程序中初始化一个变量IS_CLICKED,用以标识点击消息按钮的动作。

2. 设置点击标识值

    在点击消息按钮的相应函数中,通过函数setBoolForKey() 设置变量IS_CLICKEDbool值为false,并将该键值对保存到缓冲区中;

    调用flush()函数将键值对从缓冲区保存到本地文件中。

3. 获取点击标识值

    在更新界面的函数中,通过getBoolForKey()函数读取变量IS_CLICKED bool值。如果值为true,说明未点击过,在界面上显示消息提示;如果值为 false,说明已经点击过了,不再提示。在getBoolForKey()函数中,需要设置 第二个参数为true,即未点击的情况下默认值应该需要显示。

    上述过程实现的主要代码如下:

local IS_CLICKED = "is_clicked"
  
function uiUtil:setIsClicked(flag)    
    CCUserDefault:sharedUserDefault():setBoolForKey(IS_CLICKED, flag)
    CCUserDefault:sharedUserDefault():flush()
end

function uiUtil:isClicked()    
    return CCUserDefault:sharedUserDefault():getBoolForKey(IS_CLICKED, true)
end

    上述程序执行完毕之后,将会在目录下生成一个名为UserDefault.xml文件,文件的内容如下:

   <?xml version="1.0" encoding="UTF-8"?>
   <userDefaultRoot>
       <is_clicked>false</is_clicked>
   </userDefaultRoot>

    可以看出,is_clicked对应的值已经变为false,当玩家再次点击消息按钮时,不再弹出界面提示。

    需要注意的是,如上所述,通过CCUserDefault创建的UserDefault .xml文件并不是加密的,如果保存了重要的信息,需要将文件进行加密处理。

    由上述介绍可知,CCUserDefault类保存文件的方式类似于网站中应用较为广泛的cookies,它们都是将某些信息保存在客户端。不同的是,cookies一般只用于保存用户信息等固定的数据,而CCUserDefault方式保存数据的灵活性更好。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值