最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
cocos2dx中多个场景之间如何传值
本文将探讨Cocos2d-x中多个场景之间传值的问题,并提供两种实现两个场景间传值的方法。以下给出的代码不一定适用于当前所有版本,但通过在目标场景中增加子节点来实现传值的思想是通用的。
在Cocos2d-x开发中,两个场景间进行传值是一个常见需求。例如,你有两个场景,第一个场景是用户登录界面,第二个场景是登录后的界面,那么如何将用户登录的值传递到第二个场景呢?
在朋友(曾文理)与同事的帮助下,我总结出了两种传值方法,假设存在两个场景firstScene和secondScene。
方法一:使用成员变量传值
步骤1:在secondScene.h中添加成员变量
在secondScene.h文件中加入成员变量,例如:
// secondScene.h
class secondScene : public cocos2d::Layer
{
public:
int sceneNum;
// 其他代码...
};
步骤2:初始化成员变量(可选)
在secondScene.cpp的init()方法里,对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放在第一行,因为这样在secondScene的init方法中sceneNum的值才为1,否则为0。
步骤5:验证传递的值
和方法一类似,在secondScene的某个事件处理函数中验证sceneNum的值。
以上就是Cocos2d-x中两个场景之间传值的两种方法,希望对大家有所帮助。如有疑问,请随时提问。