cocos2d-x 4.0 学习之路(七)场景切换

场景切换

根据上一篇,我们建立了自己的MyHelloWorldScene。那么如何从HelloWorldScene切换到MyHelloWorldScene呢?

其实很简单。我们要切换场景,那么得有一个触发点,我们就用HelloWorld右下角的关闭按钮来实现吧。

我们要做的是,按下关闭按钮,不是关闭窗口而是切换到MyHelloWorldScene。那么我们看一下HelloWorldScene.cpp的menuCloseCallback()函数吧。把关闭处理去掉,加上一句话就可以了。(注意:别忘了加MyHelloWorldScene.h头文件)

void HelloWorld::menuCloseCallback(Ref* sender)
{
    //Director::getInstance()->end();
    Director::getInstance()->replaceScene(MyHelloWorld::createScene());
}

大家看到了,我把MyHelloWorld里面的Label文字和图片都改了,这样看着能清晰一些。

特殊效果

这么直接的变换有点太土了,如何增加一些变换效果呢。Cocos2dx已经为我们准备好函数了,只需要变成下面的代码就OK了。

void HelloWorld::menuCloseCallback(Ref* sender)
{
    //Director::getInstance()->end();
    Director::getInstance()->replaceScene(TransitionSlideInT::create(2.0f, MyHelloWorld::createScene()));
}

看一下效果,是不是有初步大片的感觉了。

TransitionSlideInT也是一个场景类,它通过Create函数就创建出这种带有滑动效果的场景。

它有两个参数,

float f:场景切换的时间,秒

Scene* scene:你要切换的目标场景

Cocos2dx不只提供了这一种特效,还有其他很多,

比如:TransitionJumpZoom:原场景缩小弹出,新场景放大弹入。

再有TransitionFadeUp:从下到上的百叶窗效果:

其他的不多举例了,大家可以查官方API。那些Transition开头的都是切换场景。

场景的推进和弹出

用replaceScene切换场景,新场景显示出来后,旧的场景资源会被释放。这是非常必要的,因为一个场景有时候会很大,所以切换场景后必须释放旧场景的资源。

那么有些时候,我们不希望旧场景被释放,想新旧场景来回切换,这个就用到了场景的推进和弹出。

把replaceScene换成pushScene:

// HelloWorldScene.cpp
void HelloWorld::menuCloseCallback(Ref* sender)
{
    //Director::getInstance()->end();
    Director::getInstance()->pushScene(TransitionSplitCols::create(2.0f, MyHelloWorld::createScene()));
}

然后在MyHelloWorldScene里,做下面的修改:

// MyHelloWorldScene.h
void backToScene(Ref* sender);

// MyHelloWorldScene.cpp
    auto closeItem = MenuItemImage::create(
        "CloseNormal.png",
        "CloseSelected.png",
        CC_CALLBACK_1(MyHelloWorld::backToScene, this));

void MyHelloWorld::backToScene(Ref* sender)
{
    Director::getInstance()->popScene();
}

popScene和pushScene函数是对应关系。用popScene()函数就可以回到原来的场景了,MyHelloWorld的场景资源会被释放。

发布了104 篇原创文章 · 获赞 8 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/sunnyboychina/article/details/105069922