Cocos2dx 场景自动切换

最近开始着手开发一个手游,把遇到的一些技术性问题解决方案记录一下。

一般情况我们点开一个游戏的时候,首先会出现展现开发团队的slogan的场景,然后会自动切换到资源加载场景或者菜单。

这样场景的自动切换在cocos2dx中如何实现呢,首先先来说说场景切换的问题。

cocos2dx中有一个大总管Director,由它来管理场景的切换。我们来看看创建新项目后,cocos自动为我们生成的代码,在AppDelegate.cpp中有这样一段:

auto scene = HelloWorld::createScene();
director->runWithScene(scene);


首先创建了一个HelloWorld的场景对象,然后大总管director调用runWithScene方法来展示这个场景,只有在程序启动调用一个场景时才会使用runWithScene这个方法。

切换场景使用的方法是replaceScene,看一个例子:

auto new_scene = NewScene::createScene();
Director::getInstance()->replaceScene(new_scene);
 
  
getInstance()方法获得了一个director的实例,上面那个例子里面的director就是这样的一个实例。

在切换场景的过程中还可以添加特效,例如蹦蹦跳跳地切换:

Director::getInstance()->replaceScene(TransitionJumpZoom::create(1,new_scene));
传入的两个参数分别是切换所用时间以及切换到的场景对象。在官方的demo中有很多场景切换特效的例子,如果感兴趣可以一一尝试。


接下来就说一下如何进行自动切换,其实在cocos中说到自动调用什么,大家就都不陌生了,第一时间想到的就是定时器,cocos中的定时器有三种,因为不是本文重点,就不一一介绍着三种了,只说一下用到的一种:

scheduleOnce(schedule_selector(被调用函数),时间)

这是一种只执行一次的定时器,在设置了这种定时器以后,经过设定的时间,就会自动调用schedule_selector中的函数,使用这个定时器,就可以很方便地实现场景的自动切换了。

例如本文一开始提到的展现完开发团队slogan后。自动切换到另一个场景,我们可以在前一个scene的init函数最后设置这个定时器:

this->scheduleOnce(schedule_selector(HelloWorld::changeScene),2.0f);


使用这个定时器调用切换场景的函数changeScene,这里注意这个函数的参数列表一定要是一个float类型的参数例如:

void changeScene(float dt);


我们在这个函数里面实现切换场景的代码即可:

void HelloWorld::changeScene(float dt)
{
    auto load_scene = new_Scene::createScene();
    Director::getInstance()->replaceScene(TransitionJumpZoom::create(1,new_scene));
}
PS.replaceScene会将原来的场景释放掉,有些时候我们需要原来的场景暂停,在完成新场景后返回,例如在游戏过程中进入设置界面修改一下声音什么的,这时使用replaceScene就不合适了,cocos中进行场景切换还有popScene和pushScene两种方法,我将在后面的blog中进行使用讲解。






你可能感兴趣的:(cocos2dx)