关于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);

posted @ 2017-03-07 19:58  杭者  阅读(622)  评论(0编辑  收藏  举报