переменные-члены класса были изменены, в каждом цикле (cocos2dx)

Я объявил некоторые классы в моей программе cocos2dx, и я установил некоторые значения для их переменных-членов, но после каждого цикла программы (основной цикл CCDirector) все их значения были удалены!
Я хочу, чтобы класс сохранил следующую сцену, которую следует заменить или нажать, когда сцена должна быть заменена (как вы можете видеть в коде, через 2 секунды класс introPage вызывает функцию «IntoPageDone» и сцена должна быть заменена) и я установил переменную с именем nextScene для следующей сцены, но после каждого цикла ее значение меняется на НОЛЬ.
Пожалуйста, помогите мне с этой проблемой, а также есть ли лучшие способы обработки сцен и их изменений?
TNX много!

StartingPage — это класс, который унаследован от CCLayerColor.
Вот CoCoGui.h файл:

#ifndef _COCOGUI_H_
#define _COCOGUI_H_

#include "StartingPage.h"#include "IntroPage.h"using namespace cocos2d;

class CoCoGui : public CCLayerColor{

public:
CoCoGui();
virtual ~CoCoGui(void);
virtual bool init();
static CCScene* scene();
CREATE_FUNC(CoCoGui);
private:
IntroPage * introPage;
StartingPage * startingPage;
void onEnterTransitionDidFinish();
};

#endif /* COCOGUI_H */

А это CoCoGui.cpp файл:

#include "CoCoGui.h"#include <iostream>
using namespace std;

CCScene* CoCoGui::scene(){
CCScene *scene = CCScene::create();

CoCoGui *layer = CoCoGui::create();

scene->addChild(layer);

return scene;
}

CoCoGui::CoCoGui ( )
{
this->startingPage = new StartingPage ( );
this->introPage = new IntroPage ( );
}

CoCoGui::~CoCoGui(void)
{
delete introPage;
delete startingPage;
}

bool CoCoGui::init ( ){
if ( !CCLayerColor::initWithColor ( ccc4 (100,100,100,255) ) ){
return false;
}
return true;
}

void CoCoGui::onEnterTransitionDidFinish ( ){
this->introPage->setNextScene ( StartingPage::scene( ) );
CCScene * scene = NULL;
scene = IntroPage::scene();
CCTransitionFade * trans = CCTransitionFade::create( 0.4f, scene , ccBLACK);
CCDirector::sharedDirector()->pushScene(trans);
cout << "step" << endl;
}

Это introPage.h файл:

#ifndef INTROPAGE_H_
#define INTROPAGE_H_

#include "cocos2d.h"#include "StartingPage.h"
using namespace cocos2d;

class IntroPage: public CCLayerColor {
public:
IntroPage( CCScene * nextScene );
IntroPage ( );
virtual ~IntroPage();
static CCScene* scene();
bool init();
void intoPageDone();
CREATE_FUNC(IntroPage);
CC_SYNTHESIZE_READONLY(CCLabelTTF*, _label, Label);
CCScene * getNextScene( );
void setNextScene ( CCScene * nScene );
private:
CCScene * nextScene;
};

#endif /* INTROPAGE_H_ */

А также IntroPage.cpp:

#include "IntroPage.h"
IntroPage::IntroPage( CCScene * nextScene ) {
this->introPageDone = false;
this->setNextScene ( nextScene );
}

IntroPage::IntroPage( ){
}

IntroPage::~IntroPage() {

}

void IntroPage::setNextScene ( CCScene * nScene ){
this->nextScene = nScene;
}

CCScene* IntroPage::scene(){
CCScene *scene = CCScene::create();

IntroPage *layer = IntroPage::create();

scene->addChild(layer);

return scene;
}

bool IntroPage::init() {
if (CCLayerColor::initWithColor (ccc4(0, 0, 0, 255) )) {
this->runAction(
CCSequence::actions(CCDelayTime::actionWithDuration(2),
CCCallFunc::actionWithTarget(this,
callfunc_selector(IntroPage::intoPageDone)),
NULL));
return true;
}
return false;
}

void IntroPage::intoPageDone() {
this->introPageDone = true;
CCDirector::sharedDirector( )->popScene( );
CCDirector::sharedDirector( )->pushScene( this->nextScene );
}

0

Решение

Наконец я нашел ответ!
Мы должны использовать статическую переменную, чтобы они не разрушались после основного цикла

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector