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.win32Debug.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()); (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|