Cocos2d-x3.2 UserDefault用户数据

http://my.oschina.net/Jacedy/blog/301859?p=1


//GameScene.h

#include"cocos2d.h"

USING_NS_CC;

classGameScene:publiccocos2d::Layer
{
public:
staticcocos2d::Scene*createScene();

virtualboolinit();

voidmenuCallback(Ref*pSender);

CREATE_FUNC(GameScene);

private://注意不能用auto关键字
Sizesize;
Sprite*sprite;
};

//GameScene.cpp

//CreatedbyJacedyon14-8-11.

#include"GameScene.h"

USING_NS_CC;

cocos2d::Scene*GameScene::createScene()
{
autoscene=Scene::create();//创建一个场景
autolayer=GameScene::create();//创建一个图层
scene->addChild(layer);
returnscene;
}

//初始化当前的图层
boolGameScene::init()
{
if(!Layer::init())//初始化父类
returnfalse;

//获取屏幕大小
size=Director::getInstance()->getVisibleSize();
//autosize=Director::getInstance()->getWinSize();
//添加一个图片精灵
sprite=Sprite::create("OnePiece_1.png");
sprite->setPosition(Vec2(size.width/2,size.height/2));
this->addChild(sprite);

//新建数据
UserDefault::getInstance()->setBoolForKey("BOOL",true);
UserDefault::getInstance()->setFloatForKey("Float",12.18);
UserDefault::getInstance()->setStringForKey("String","Jacedy");

//保存数据
UserDefault::getInstance()->flush();

boolb=UserDefault::getInstance()->getBoolForKey("BOOL",false);//第二个参数为初始化内容
floatf=UserDefault::getInstance()->getFloatForKey("Float",0.0f);
std::strings=UserDefault::getInstance()->getStringForKey("String","null");

//打印输出
log("b=%d",b);
log("f=%f",f);
log("s=%s",s.c_str());

//获取文件路径
//FileUtils::getInstance()->getWritablePath();

//判断XML文件是否存在
//UserDefault::getInstance()->isXMLFileExit();

returntrue;
}

voidGameScene::menuCallback(Ref*pSender)
{

}

备注:使用UserDefault保存最高分、声音等一些数据,当用户结束了游戏重新打开时,如果使用isXMLFileExit()来判断XML文件是否存在,那么系统就会初始化XML文件,里面原来的数据也就清除了。所以不能用isXMLFileExit(),解决办法:通过直接判断一个键值是否存在来获取XML文件数据,代码如下:

boolMenuLayer::init()
{
if(!Layer::init())//初始化父类
returnfalse;

size=Director::getInstance()->getVisibleSize();

//初始化最高分数
if(!UserDefault::getInstance()->getBoolForKey("isExit",false))
{
UserDefault::getInstance()->setBoolForKey("isExit",true);

m_bestscore=0;
UserDefault::getInstance()->setIntegerForKey("m_bestscore",0);
//第一次运行时,如果XML文件不存在就会新建
UserDefault::getInstance()->flush();
}

returntrue;
}


目前最新的3.3rc0版本进行开发,正好用到UserDefault这个类来存储一些简单的小数据,但是因为程序出了些问题,所以我需要打开这个保存的UserDefault.xml文件,在以前的版本中,都是存放在项目的 \proj.win32\Debug.win32文件夹下,所以很容易找到,但这次找不到了,我以后我看瞎眼了,调整下修改时间排序方式,没有,直接搜索xml文件,还是没有,所以就只有调试来找这个目录了。

这个类文件是CCUserDefault.cpp,所以一打开你就可以知道它是怎么实现的了,我主要是找怎么保存文件的,其中有这么一个函数,

void UserDefault::initXMLFilePath()
{
    if (! _isFilePathInitialized)
    {
        _filePath += FileUtils::getInstance()->getWritablePath() + XML_FILE_NAME;
        _isFilePathInitialized = true;
    }    
}

因为是跨平台存储方案,所以你懂的,咱们打印一下这个可读写路径就能解决了。咱们来打印一下咯。

log("%s",FileUtils::getInstance()->getWritablePath().c_str());

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...