http://my.oschina.net/Jacedy/blog/301859?p=1
//GameScene.h
#include "cocos2d.h"
USING_NS_CC;
class GameScene : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
void menuCallback(Ref* pSender);
CREATE_FUNC(GameScene);
private: //注意不能用auto关键字
Size size;
Sprite *sprite;
};
//GameScene.cpp
// Created by Jacedy on 14-8-11.
#include "GameScene.h"
USING_NS_CC;
cocos2d::Scene* GameScene::createScene()
{
auto scene = Scene::create(); //创建一个场景
auto layer = GameScene::create(); //创建一个图层
scene->addChild(layer);
return scene;
}
//初始化当前的图层
bool GameScene::init()
{
if(!Layer::init()) //初始化父类
return false;
//获取屏幕大小
size = Director::getInstance()->getVisibleSize();
//auto size = 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();
bool b = UserDefault::getInstance()->getBoolForKey("BOOL", false); //第二个参数为初始化内容
float f = UserDefault::getInstance()->getFloatForKey("Float", 0.0f);
std::string s = 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();
return true;
}
void GameScene::menuCallback(Ref* pSender)
{
}
备注:使用UserDefault保存最高分、声音等一些数据,当用户结束了游戏重新打开时,如果使用 isXMLFileExit() 来判断XML文件是否存在,那么系统就会初始化XML文件,里面原来的数据也就清除了。所以不能用isXMLFileExit() ,解决办法:通过直接判断一个键值是否存在来获取XML文件数据,代码如下:
bool MenuLayer::init()
{
if(!Layer::init()) //初始化父类
return false;
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();
}
return true;
}
目前最新的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());