![Cocos2d-JS游戏开发快速入门到实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/782/26793782/b_26793782.jpg)
3.5 场景切换特效
Cocos提供了大量丰富的场景转场特效,用户可以在源码的CCTransition.js中看到一些基础的转场特效,在实际开发中为了保持游戏风格的统一,或许并不能把所有的特效一一用到,大多数转场特效的使用方法大同小异,这里对一些常用的转场特效做一个简单的介绍。本节的所有代码均在SceneSwitchEffectDemo项目中。
在不使用场景切换特效的时候,调用Director的runScene方法时传入的参数是Scene类,而实际上需要转场特效时传入的参数是TransitionScene的子类。
在CCTransition.js中可以看到,Cocos定义了TransitionScene继承Scene,而其下面的子类转场特效都继承自TransitionScene类,通过TransitionScene查看源码可以知道,实际上转场场景类自身也是场景的子类,它通过播放完一系列的转场动画之后再切换到目标场景上,只是中间多了一步转场动画的播放而已。
下面通过一个小小的Demo来演示场景切换特效的使用。为了实现场景切换的效果,首先需要创建几个场景,这里创建一个自定义场景作为入口场景,代码如下。
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P70_5735.jpg?sign=1739678228-Rli5X1zGgxbq9xytI5EJtpEeHaHgFslk-0-0935fa6b3c180ee8de9fb5edcf547bcb)
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P71_5736.jpg?sign=1739678228-8X7pzjJ4FRNOXOtoukrmAxv8jCDVPM24-0-51fa966ad399b49ac5fa0c3e9d68efce)
如代码所示,在MyLayer中定义了菜单项,可以单击添加文字,可以切换游戏场景和帮助场景,游戏场景的代码如下。
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P72_5737.jpg?sign=1739678228-yh7cZIv4QEPaEvCm6m57DutrtHjfV0Mm-0-e25813b2782b8c1fc7d5b7cdc60d9cea)
帮助场景的代码如下。
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P73_5742.jpg?sign=1739678228-n0O6tMgMTBSQjzqfZ8vhEJHGWdvnFi0l-0-1f154a6ebb8019c33c4ea4c2bb10f0c6)
3个场景的代码都很简单,只是通过菜单项调用runScene方法来相互切换,不过它们有一个共同点,就是在runScene时调用了getRandomTransition方法,这个方法是自定义的,其实现如下。
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P73_5744.jpg?sign=1739678228-tEOZ5PVUKTueDZblK8sibaTwvTvkp9lE-0-3faaea91ae3fcbabf582b3948a46327b)
它的内部实现就是通过随机的23种常用场景切换特效运用到场景切换中,其中23种常用的场景切换及其注释如下。
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P74_5745.jpg?sign=1739678228-ZatDEMsqn3mRZRVUI7UupvyJa5Ojy0TH-0-801b4e88f99dd3799db52fbf1de902f6)
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P75_5747.jpg?sign=1739678228-yIRPtTfd30ZvdI4CY6D8kViOLmrP5FCu-0-9d013d589cc5fa60d89ecd2095cf90cd)
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P76_5748.jpg?sign=1739678228-4tiFSJI2I39SKyHXgZq4DXgfAGRJMwTE-0-e96caa3f96c2a56fb07bf24aa25c2c10)
![](https://epubservercos.yuewen.com/C005C7/15253388705242106/epubprivate/OEBPS/Images/Figure-P77_5749.jpg?sign=1739678228-HjhixGnqZsX6HOK8OqfGNtqgFhZwxMlF-0-efda95b3681b37678533ba1bc8a45ee0)
以上只是几中常用的场景切换特效,在实际开发中不一定都能用上,用户可以通过Cocos的API文档了解官方提供了哪些特效,以便在需要的时候使用。