RT
我在一个场景类的中定义一个数组(即成员变量)如下;
int s={0};
在程序中 对这个成员变量操作。
但是当我更换场景 CCDirector::sharedDirector()->replaceScene(transitionScene);
也成功触发了这个类的虚构函数。
但是 我发现第二次 创建这个类的时候 这个成员变量 并没有再次初始化。原先我在上个场景中对s进行修改的值既然还在。并且我用CCLOG在构造方法中输出验证过。求解释啊!!!
我后来随便顶一个成员变量
int a=0;
依然在场景的方法中对他进行更改,但是第二次进入这个场景时,这个a没有初始化成0,还是我上次给它的值
还真神奇,除非它是静态变量
不懂是怎么回事。 下面是.h的代码
#include “cocos2d.h”
int compare(const void* a, const void* b);
class GameMainScene : public cocos2d::CCLayer
{
public:
GameMainScene();
~GameMainScene();
virtual bool init();
void menuCloseCallback(CCObject* pSender);
static cocos2d::CCScene* scene();
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void registerWithTouchDispatcher();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(GameMainScene);
private:
cocos2d::CCPoint prePoint;
int countCleared;
int counter;
private:
void initSound();
void initData();
void initView();
void initGameElementView();
cocos2d::CCString* getImageFilename(int);
void exitGame(float);
cocos2d::CCPoint pointOfView(cocos2d::CCPoint point);
void showWin();
void clearPoint(cocos2d::CCPoint point);
int getTagFromPoint(cocos2d::CCPoint point);
bool isSamePoints(cocos2d::CCPoint p1, cocos2d::CCPoint p2);
bool isInGameLayer(cocos2d::CCPoint point);
bool isEmpty(cocos2d::CCPoint point);
bool canClearTwo(cocos2d::CCPoint pointpre, cocos2d::CCPoint pointcurrent);
bool match_direct(cocos2d::CCPoint a, cocos2d::CCPoint b);
bool match_one_corner(cocos2d::CCPoint a, cocos2d::CCPoint b);
bool match_two_corner(cocos2d::CCPoint a, cocos2d::CCPoint b);
bool match(cocos2d::CCPoint a,cocos2d::CCPoint b);
};
这个是cpp中的
static int imgNames = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14
};
static int currentLevel=0;
static int addingPerLevel=2;
static int countPerElement=2;
int gameLayer={0};
int winHeigh;
我对gameLayer和winHeigh进行的更改,可是再create后 这个2个值既然没被初始化。不知道哪里不对
你cpp里那些代码是写在函数里的吗?
gameLayer和winHeigh是局部变量还是全局变量啊?
是全局的变量,写在函数外面的。
那你create写什么了?怎么初始化的?
CREATE_FUNC(GameMainScene);
然后写个静态的
static cocos2d::CCScene* scene();
在前个场景中 调用scene()方法
跟官方HelloWorld 的Demo是一样的 只是加了个过场动画 这个没影响吧?
你init有对gameLayer和winHeigh初始化吗?没有的话肯定不会初始化啊
你的winHeigh初始化实在类外面初始化的啊,创建对象的时候不会初始化他的,所以你修改了就修改了。。。
全局的变量,和场景释放一点关系也没有,写到类头文件里,然后构造函数中修改吧。