关于Cocos2d-x中两个场景之间参数的传递
两个场景之间,有的时候要进行参数传递,如果想通过实例化出一个场景,从而得到属性和方法是不对的想法
你有两个场景,第一场景是用户登录界面,第二场景则是你登录后的界面,你如何将用户登录的值传到第二个场景呢
两种方法(有两个场景 HelloWorld, LotteryScene)
一:1)在LotteryScene.h 中加入成员变量,如 Map<std::string, Node*> map2;(我想说的是任何数据类型都可以,所以这里用Map数据类型来更加有说服力)
并在LotteryScene.cpp的init()方法里,map2做初始化;//可以省略这句
2)在HelloWorld转到LotteryScene时,调用一下一下方法,一定要记得把要传递的变量的类型设置为public
auto scene = Scene::create(); LotteryScene *layer = LotteryScene::create(); layer->map2 = map1; scene->addChild(layer);//类似firstScene中的scene()方法 Director::getInstance()->replaceScene(TransitionFade::create(1, scene));
3)在LotteryScene.cpp中就可以验证map2的值
老版本的转换,还没有转换为新版本,firstScene转到secondScene的参数传递
二:1)在secondScene.h中添加一个静态参数:static int sceneNum;
在secondScene.cpp中的方法外面写一个全局变量
int TableViewLayer::sceneNum = 0;
2)在firstScene.h中类外写 class secondScene;并在属性中写secondScene* secondLayer;
3)在firstScene.cpp转到第二场景方法写
secondScene->sceneNum = 1;
CCScene* scene = secondScene::scene();//一定要secondScene->sceneNum = 1放在第一行,因为此时init中sceneNum的值为1,否则则为0;
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.5f,scene));
4) 然后就像上面说的,试试看sceneNum为多少。
三.如果只是使用另一个场景的一些
enum NodeTag
{
HERO_TAG = 100,
MYHERO_TAG = 101,
POT_TAG=102,
FALL_TAG=103,
BLOCK_TAG = 104,
STAR_TAG = 105,
BED_TAG = 106,
BABY_TAG =107,
EDGE_TAG = 108,
GROUND_TAG = 109,
BACKGROUND_TAG = 110,
LIFE_TAG = 111,
PAUSE_MENU = 112,
CONTROLBTNS=113,
SCORELABEL=114,
};
则可以在另一个场景文件或者是实例类文件中
1.先引入含有enum定义的场景文件的.h
2.在有用到的地方写
this->addChild(myHero, 1, GameScene::NodeTag::HERO_TAG);