C++ 类的成员变量在每个循环(cocos2dx)中都已更改
我已经在cocos2dx程序中声明了一些类,并且为它们的成员变量设置了一些值,但是每次程序循环(CCDirector的主循环)之后,它们的所有值都被删除了! 我希望it类保存下一个场景,该场景应该在场景被替换时被替换或推送(正如您在代码中看到的,在2秒钟后,introPage类调用函数“IntoPageDone”并且场景应该被替换),我已经为下一个场景设置了一个名为nextScene的变量,但是在每个循环之后,它的值都变为NULL。 请帮我解决这个问题,还有没有更好的方法来处理场景和它们的变化?? 太多了 StartingPage是从CCLayerColor继承的类。 以下是CoCoGui.h文件: 这是CoCoGui.cpp文件: 以及IntroPage.cpp:C++ 类的成员变量在每个循环(cocos2dx)中都已更改,c++,cocos2d-iphone,cocos2d-x,game-development,C++,Cocos2d Iphone,Cocos2d X,Game Development,我已经在cocos2dx程序中声明了一些类,并且为它们的成员变量设置了一些值,但是每次程序循环(CCDirector的主循环)之后,它们的所有值都被删除了! 我希望it类保存下一个场景,该场景应该在场景被替换时被替换或推送(正如您在代码中看到的,在2秒钟后,introPage类调用函数“IntoPageDone”并且场景应该被替换),我已经为下一个场景设置了一个名为nextScene的变量,但是在每个循环之后,它的值都变为NULL。 请帮我解决这个问题,还有没有更好的方法来处理场景和它们的变化?
我终于找到了答案!
我们应该使用静态变量,这样它们就不会在主循环后被破坏,因为每次程序循环(CCDirector的主循环)后,
CoCoCoGui
类都有一个用户定义的构造函数和析构函数,但没有复制构造函数或赋值操作符。如果有人要复制或分配这样一个对象,那么所包含的指针很可能会乱七八糟。请参见CREATE_FUNC宏使用的另一个构造函数没有任何构造函数的输入类型,如果我更改CREATE_FUNC类的CREATE函数,则返回错误
#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 */
#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;
}
#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_ */
#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 );
}