Cocos2d-x基础:TestCpp之场景切换

来源:互联网 发布:anaconda linux 编辑:程序博客网 时间:2024/04/20 11:06

TransitionsTest.h 文件:

        有一个场景类TransitionsTestScene,还有两个布景层类TestLayer1、TestLayer2。

        在主菜单选择了TransitionsTest菜单项后,首先运行以下代码,从默认的场景切换到“场景切换示例的场景”来:

void TransitionsTestScene::runThisTest(){    CCLayer * pLayer = new TestLayer1();    addChild(pLayer);    pLayer->release();    CCDirector::sharedDirector()->replaceScene(this);}
        调用布景层1的构造函数,在布景层中加入一个背景图片、Label文字、三个切换菜单项,代码如下:

TestLayer1::TestLayer1(void){    float x,y;    CCSize size = CCDirector::sharedDirector()->getWinSize();    x = size.width;    y = size.height;    CCSprite* bg1 = CCSprite::create(s_back1);    bg1->setPosition( ccp(size.width/2, size.height/2) );    addChild(bg1, -1);    CCLabelTTF* title = CCLabelTTF::create( (transitions[s_nSceneIdx]).c_str(), "Thonburi", 32 );    addChild(title);    title->setColor( ccc3(255,32,32) );    title->setPosition( ccp(x/2, y-100) );    CCLabelTTF* label = CCLabelTTF::create("SCENE 1", "Marker Felt", 38);    label->setColor( ccc3(16,16,255));    label->setPosition( ccp(x/2,y/2));        addChild( label);    // menu    CCMenuItemImage *item1 = CCMenuItemImage::create(s_pPathB1, s_pPathB2, this, menu_selector(TestLayer1::backCallback) );    CCMenuItemImage *item2 = CCMenuItemImage::create(s_pPathR1, s_pPathR2, this, menu_selector(TestLayer1::restartCallback) );    CCMenuItemImage *item3 = CCMenuItemImage::create(s_pPathF1, s_pPathF2, this, menu_selector(TestLayer1::nextCallback) );    CCMenu *menu = CCMenu::create(item1, item2, item3, NULL);    menu->setPosition( CCPointZero );    item1->setPosition(ccp(VisibleRect::center().x - item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));    item2->setPosition(ccp(VisibleRect::center().x, VisibleRect::bottom().y+item2->getContentSize().height/2));    item3->setPosition(ccp(VisibleRect::center().x + item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));    addChild(menu, 1);        schedule( schedule_selector(TestLayer1::step), 1.0f); }
        当我们按下向右或向左的菜单项后,就会调用下面的回调函数,进行场景的切换,代码如下:

void TestLayer1::nextCallback(CCObject* pSender){    s_nSceneIdx++;    s_nSceneIdx = s_nSceneIdx % MAX_LAYER;    CCScene* s = new TransitionsTestScene();    CCLayer* pLayer = new TestLayer2();    s->addChild(pLayer);    CCScene* pScene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);    s->release();    pLayer->release();    if (pScene)    {        CCDirector::sharedDirector()->replaceScene(pScene);    }}
        上面代码的执行过程:

                            (1)创建新场景、布景层

                            (2)将布景层放入场景中

                            (3)包装创建的新场景,增加切换效果

                            (4)替换场景。


OK,如果正常点写切换场景这个效果的话,是这么写的:

CCScene* s = new CCScene();testLayer* pLayer = new testLayer();s->addChild(pLayer);pLayer->release();if (s){CCDirector::sharedDirector()->pushScene(CCTransitionSlideInT::create(2,s));}
        我这写法也有点戳敲打~    写法有千奇百怪,但执行过程都是这些。123按顺序来。

最后,注意一点,pushScene只是将新场景放到栈顶,显示出来,旧场景依然存在(在内存中),所以一般是使用replaceScene。

        没有最好的方法,只有最适合的方法,所以实际情况,自己把握咯~