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,所以一打开你就可以知道它是怎么实现的了,我主要是找怎么保存文件的,其中有这么一个函数,
@H_367_502@void UserDefault::initXMLFilePath() { if (! _isFilePathInitialized) { _filePath += FileUtils::getInstance()->getWritablePath() + XML_FILE_NAME; _isFilePathInitialized = true; } }因为是跨平台存储方案,所以你懂的,咱们打印一下这个可读写路径就能解决了。咱们来打印一下咯。
log("%s",FileUtils::getInstance()->getWritablePath().c_str());