我正在使用cocos2d-x(iOS)开发一款游戏。在那里,我创建了几个场景,并在这些场景之间进行了转换。在每次转换期间,调用每个场景(层)的init()(每次在init()之前调用构造函数)。我的问题是,我怎样才能在init()或构造函数中只进行一次变量初始化,即使每次都调用init()?或任何其他替代解决方案?
CCUserDefault::sharedUserDefault()->setBoolForKey("firstTimeInit", false);
bool firstTimeInit = CCUserDefault::sharedUserDefault()->getBoolForKey("firstTimeInit");
if (!firstTimeInit)
{
for(int i = 0; i < 10; i++)
{
char szName[22] = {0};
sprintf(szName, "Rank%i", i);
CCUserDefault::sharedUserDefault()->setIntegerForKey(szName,0);
CCUserDefault::sharedUserDefault()->flush();
int score = CCUserDefault::sharedUserDefault()->getIntegerForKey(szName);
vScore.push_back(score);
}
CCUserDefault::sharedUserDefault()->setBoolForKey("firstTimeInit",true); }
我在init()方法中编写了这段代码..我想要的是firstF货币,我做了假,只刷了一次。
编辑#####
在每个转换的cocos2d-x中调用init()方法,这就是每次初始化时的原因。即使在我退出游戏并重新运行之后,我也希望这次初始化。我通过使用CCUserDefault的setBoolForKey()来尝试它,但是徒劳无功,因为它也在init()中。
答案 0 :(得分:0)
这将完成你的目标
bool val = cocos2d::CCUserDefault::sharedUserDefault()->getBoolForKey("initialized");
if (val != true){
cocos2d::CCUserDefault::sharedUserDefault()->setBoolForKey("initialized", true);
cocos2d::CCLog(" initializing value ");
}
答案 1 :(得分:0)
目前发生了什么: -
1&gt;游戏开始你把firstTimeInit = false,这使if条件为真;
2&gt;然后你在最后指定firstTimeInit = true。
3&GT;你退出并再次开始游戏并运行第1步,它会将firstTimeInit中的当前值从true覆盖为false,再次使if条件为true,因此你需要删除第一个语句
CCUserDefault::sharedUserDefault()->setBoolForKey("firstTimeInit", false)
;
这样一旦键设置为true,它就永远不会设置为false;
假设:但我假设如果没有布尔键,那么它的值总是返回false。多次检查,并返回假。