cocos2dx中多个场景之间如何传值

2015年01月16日 10:50 0 点赞 0 评论 更新于 2025-11-21 14:31

本文将探讨Cocos2d-x中多个场景之间传值的问题,并提供两种实现两个场景间传值的方法。以下给出的代码不一定适用于当前所有版本,但通过在目标场景中增加子节点来实现传值的思想是通用的。

在Cocos2d-x开发中,两个场景间进行传值是一个常见需求。例如,你有两个场景,第一个场景是用户登录界面,第二个场景是登录后的界面,那么如何将用户登录的值传递到第二个场景呢?

在朋友(曾文理)与同事的帮助下,我总结出了两种传值方法,假设存在两个场景firstScenesecondScene

方法一:使用成员变量传值

步骤1:在secondScene.h中添加成员变量

secondScene.h文件中加入成员变量,例如:

// secondScene.h
class secondScene : public cocos2d::Layer
{
public:
int sceneNum;
// 其他代码...
};

步骤2:初始化成员变量(可选)

secondScene.cppinit()方法里,对sceneNum进行初始化。此步骤可以省略,因为在C++中,类的成员变量如果没有显式初始化,会有默认值。

// secondScene.cpp
bool secondScene::init()
{
if (!Layer::init())
{
return false;
}
sceneNum = 0; // 可以省略这句
return true;
}

步骤3:在firstScene中传递值并切换场景

firstScene转到secondScene时,进行如下操作:

// firstScene.cpp
void firstScene::gotoSecondScene()
{
cocos2d::CCScene* scene = cocos2d::CCScene::create();
secondScene *layer = secondScene::create();
layer->sceneNum = 1;
scene->addChild(layer);
cocos2d::CCDirector::sharedDirector()->replaceScene(cocos2d::CCTransitionFade::create(1.5f, scene));
}

步骤4:在secondScene中验证传递的值

secondScene.cpp的某个事件处理函数(如ccTouchBegan())中验证sceneNum的值:

// secondScene.cpp
bool secondScene::ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *event)
{
cocos2d::CCLOG("...........");
if (sceneNum == 0)
{
cocos2d::CCLOG("00000000000");
}
else if (sceneNum == 1)
{
cocos2d::CCLOG("1111111111111111111");
}
cocos2d::CCLOG("...........");
return true;
}

运行程序后,你会发现输出结果为1111111111111

方法二:使用静态变量传值

步骤1:在secondScene.h中添加静态参数

secondScene.h文件中添加一个静态参数:

// secondScene.h
class secondScene : public cocos2d::Layer
{
public:
static int sceneNum;
// 其他代码...
};

步骤2:在secondScene.cpp中定义静态变量

secondScene.cpp中的方法外面定义这个静态变量:

// secondScene.cpp
int secondScene::sceneNum = 0;

步骤3:在firstScene.h中声明secondScene类并添加指针

firstScene.h中类外声明secondScene类,并在属性中添加secondScene的指针:

// firstScene.h
class secondScene;

class firstScene : public cocos2d::Layer
{
public:
secondScene* secondLayer;
// 其他代码...
};

步骤4:在firstScene.cpp中传递值并切换场景

firstScene.cpp转到secondScene的方法中,先设置静态变量的值,再切换场景:

// firstScene.cpp
void firstScene::gotoSecondScene()
{
secondScene::sceneNum = 1;
cocos2d::CCScene* scene = secondScene::scene();
cocos2d::CCDirector::sharedDirector()->replaceScene(cocos2d::CCTransitionFade::create(1.5f, scene));
}

需要注意的是,一定要将secondScene::sceneNum = 1放在第一行,因为这样在secondSceneinit方法中sceneNum的值才为1,否则为0

步骤5:验证传递的值

和方法一类似,在secondScene的某个事件处理函数中验证sceneNum的值。

以上就是Cocos2d-x中两个场景之间传值的两种方法,希望对大家有所帮助。如有疑问,请随时提问。