声 明本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。gl.paea.cn版权所有。
大家好,欢迎回到“和屌丝一起学cocos2dx”系列教程,上节我们说到了音乐音效,不知道大家有没有做出来效果呢?这节我们还是要继续学习哦,可别偷懒,这节我们要说的是数据存储。
【一】:最简简介
手机游戏中,用户数据存储有多种方式,网游可以直接保存服务器,单机可以保存在SQLite等,cocos2dx为了更好的跨平台操作,采用了自己的CCUserDefault。
【二】:函数
setBoolForKey("键","值"); //设置一个bool值
setStringForKey("键","值"); //设置一个string值
setDoubleForKey("键","值"); //设置一个double值
setFloatForKey("键","值"); //设置一个float值
setIntegerForKey("键","值"); //设置一个int值
getBoolForKey("键","默认值"); //读取一个bool值
getStringForKey("键","默认值"); //读取一个string值
getDoubleForKey("键","默认值");//读取一个double值
getFloatForKey("键","默认值"); //读取一个float值
getIntegerForKey("键","默认值"); //读取一个int值
flush(); //保存到文件
这里set就是用键值对保存数据,最后一定要用flush把数据保存到文件,否则会丢失。
get函数获取数据的时候,要给个默认值,以便获取不到的时候代替数据,防止空异常。
【三】:示例
1.新建项目Datademo
Datademo.cpp
CCSize mysize=CCDirector::sharedDirector()->getWinSize();
CCLabelTTF* pLabel = CCLabelTTF::create("none", "Arial", 24);
pLabel->setPosition(ccp(mysize.width / 2, mysize.height - 50));
this->addChild(pLabel, 1);
//判断数据
if(CCUserDefault::sharedUserDefault()->getBoolForKey("havedata",false)){
//有存档
string jj=CCUserDefault::sharedUserDefault()->getStringForKey("jj","none");
double aa=CCUserDefault::sharedUserDefault()->getDoubleForKey("aa",0.0);
double bb=CCUserDefault::sharedUserDefault()->getFloatForKey("bb",0.0f);
double cc=CCUserDefault::sharedUserDefault()->getIntegerForKey("cc",0);
//转换
//jj.data();可以直接获取值
char out[50];
sprintf(out,"%f",aa);
//输出
pLabel->setString(out);
}else{
//没存档
pLabel->setString("no data,now set.");
CCUserDefault::sharedUserDefault()->setBoolForKey("havedata",true);
CCUserDefault::sharedUserDefault()->setStringForKey("jj","Hello Boy!");
CCUserDefault::sharedUserDefault()->setDoubleForKey("aa",1.25);
CCUserDefault::sharedUserDefault()->setFloatForKey("bb",2.33f);
CCUserDefault::sharedUserDefault()->setIntegerForKey("cc",5);
//保存
CCUserDefault::sharedUserDefault()->flush();
}
好了,我们来看一下效果。