Я работаю над одной игрой в 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 () .. и я хочу, чтобы firstTimeInit, который я сделал false, инициализировал только один раз.
РЕДАКТИРОВАТЬ #####
В cocos2d-x для каждого перехода вызывается метод init (), поэтому каждый раз, когда происходит наша инициализация. Также я хочу эту однократную инициализацию даже после того, как выйду из игры и перезапущусь. Я попробовал это с помощью CCUserDefault setBoolForKey (), но напрасно, как и в init ().
В настоящее время, что происходит: —
1> игра начинается, вы устанавливаете firstTimeInit = false, что делает условие if истинным;
2> затем вы назначаете firstTimeInit = true в конце.
3> вы выходите и игра запускается снова и запускает шаг 1, который переопределяет текущее значение в firstTimeInit с true на false, снова делая условие if истинным, поэтому вам нужно удалить первый оператор
CCUserDefault::sharedUserDefault()->setBoolForKey("firstTimeInit", false)
;
так что когда ключ установлен в значение true, он никогда не устанавливается в значение false;
Предположение: Но я предполагаю, что если логический ключ отсутствует, то получение его значения всегда возвращает false. Проверено несколько раз, и он вернул false.
Это будет делать то, что вы после
bool val = cocos2d::CCUserDefault::sharedUserDefault()->getBoolForKey("initialized");
if (val != true){
cocos2d::CCUserDefault::sharedUserDefault()->setBoolForKey("initialized", true);
cocos2d::CCLog(" initializing value ");
}