加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x之简单数据存储 — Userdefault

发布时间:2020-12-14 16:25:37 所属栏目:百科 来源:网络整理
导读:http://www.areskill.com/?p=527 1. 基本概念 本篇文章是介绍简单数据存储的Userdefault类,在API中: 就是存储一些简单的数据,比如声音的开启关闭,音效的开启关闭,最高分,金币数量的存储这些东西。 2. 获取 这些都是基于一些基本类型的,比如int,float

http://www.areskill.com/?p=527

1. 基本概念

本篇文章是介绍简单数据存储的Userdefault类,在API中:

就是存储一些简单的数据,比如声音的开启关闭,音效的开启关闭,最高分,金币数量的存储这些东西。

2. 获取

这些都是基于一些基本类型的,比如int,float,double,bool,string,二进制 这些东西,

对于它们的存取有相应的 set和 get函数,比如:

找到Userdefault.h

boolgetBoolForKey(constchar*pKey);
intgetIntegerForKey(constchar*pKey);
floatgetFloatForKey(constchar*pKey);
doublegetDoubleForKey(constchar*pKey);
std::stringgetStringForKey(constchar*pKey);
DatagetDataForKey(constchar*pKey);//二进制

参数里的 pKey 就是,你在设置的时候,设置的名称,类似于一个地址,通过这个地址,你可以找到这里存储的东西。 不光这样,其实里面都还有带两个参数的,比如:

boolgetBoolForKey(constchar*pKey,booldefaultValue);

其他的和这个也一样,参数有两个的,都是defaultValue,只是类型不一样而已,它的含义就是,如果你通过pKey查找不到,里面没有值,你就可以让它返回defaultValue值,并且设置成defaultValue值。

其实,如果没有defaultValue也一样,只是设置并返回的是0而已:

intUserDefault::getIntegerForKey(constchar*pKey)
{
returngetIntegerForKey(pKey,0);
}

intUserDefault::getIntegerForKey(constchar*pKey,intdefaultValue)
{
constchar*value=nullptr;
tinyxml2::XMLElement*rootNode;
tinyxml2::XMLDocument*doc;
tinyxml2::XMLElement*node;
node=getXMLNodeForKey(pKey,&rootNode,&doc);
//findthenode
if(node&&node->FirstChild())
{
value=(constchar*)(node->FirstChild()->Value());
}
intret=defaultValue;
if(value)
{
ret=atoi(value);
}
if(doc)
{
deletedoc;
}
returnret;
}

上面那个是UserDefault类中两个关于int的get函数设置,可以看到没有defaultValue参数的,执行的是将defaultValue设置为0的函数。

3.设置

相应的对于set来说,就很简单了,只是设置值而已。

voidsetBoolForKey(constchar*pKey,boolvalue);
voidsetIntegerForKey(constchar*pKey,intvalue);
voidsetFloatForKey(constchar*pKey,floatvalue);
voidsetDoubleForKey(constchar*pKey,doublevalue);
voidsetStringForKey(constchar*pKey,conststd::string&value);
voidsetDataForKey(constchar*pKey,constData&value);

4.关于flush

然后就是这个flush函数了,这个函数,话说我没怎么搞太懂,网上也众说纷纭。API上说是将内容保存到XML文件中,而我查了.cpp中的定义是:

voidUserDefault::flush()
{
}

没错,就是这样,而且,在我的游戏中,没有用flush函数,也没有什么异样出现。

5.如何使用

类的相应函数都介绍完了,接下来就是使用的问题,首先要确定文件是否存在,不存在就初始化它:

if(!LoadBooleanFromXML(“_IS_EXISTED”))
{
initUserData();
SaveBooleanToXML(“_IS_EXISTED”,true);
}

然后,无论设置或者获取,格式都必须是:

CCUserDefault::sharedUserDefault()->setBoolForKey(m_Sound,true);
CCUserDefault::sharedUserDefault()->getBoolForKey(m_Sound);

前面都要有一长串东东,所以真正在使用时,都会设置宏定义来简化它,比如:

#defineGetBoolCCUserDefault::sharedUserDefault()->getBoolForKey
#defineSetBoolCCUserDefault::sharedUserDefault()->setBoolForKey

来源网址:http://blog.csdn.net/lttree/article/details/40897789

转载请注明:游戏cocos2d-x?Cocos2d-x之简单数据存储 — Userdefault

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读