场景的切换
一个游戏中会有多个场景。
比如游戏菜单是一个场景 :
游戏设置界面也是一个场景 :
cocos2d中,使用cc.director.runScene函数进行场景的切换。 使用方法如下 :
cc.director.runScene(new Scene());
使用上面的代码进行场景切换的过程是瞬间的,没有任何的过渡效果。若想要有过渡效果的场景切换,可以如下设置 :
cc.director.runScene( new cc.TransitionFade(3.0, new Scene() ) );
运行后,场景的切换会有一个渐变的过渡效果。过渡的快慢取决于3.0这个参数,这个参数代表过渡的时间。
除了cc.TransitionFade这个效果外,cocos2d还提供了其它场景的过渡效果 :
无需webgl支持
cc.director.runScene( new cc.TransitionFade(3.0, new Scene() ) ); //渐变切换
cc.director.runScene( new cc.TransitionJumpZoom(3.0, new Scene() ) ); //先缩小,然后跳跃切换
cc.director.runScene( new cc.TransitionShrinkGrow(3.0, new Scene() ) ); //交错切换
cc.director.runScene( new cc.TransitionRotoZoom(3.0, new Scene() ) );//旋转切换
cc.director.runScene( new cc.TransitionProgressRadialCCW(0.5, new Scene() ) );//逆时针切换到下一场景
cc.director.runScene( new cc.TransitionProgressRadialCW(0.5, new Scene() ) );//顺时针切换到下一场景
cc.director.runScene( new cc.TransitionMoveInL(3.0, new Scene() ) ); //新场景从左移入覆盖,会叠加在旧场景上
cc.director.runScene( new cc.TransitionMoveInR(3.0, new Scene() ) );//新场景从右移入覆盖,会叠加在旧场景上
cc.director.runScene( new cc.TransitionMoveInT(3.0, new Scene() ) );//新场景从上移入覆盖,会叠加在旧场景上
cc.director.runScene( new cc.TransitionMoveInB(3.0, new Scene() ) );//新场景从下移入覆盖,会叠加在旧场景上
cc.director.runScene( new cc.TransitionSlideInL(3.0, new Scene() ) ); //场景从左移入推出原场景
cc.director.runScene( new cc.TransitionSlideInR(3.0, new Scene() ) );//场景从右移入推出原场景
cc.director.runScene( new cc.TransitionSlideInT(3.0, new Scene() ) );//场景从上移入推出原场景
cc.director.runScene( new cc.TransitionSlideInB(3.0, new Scene() ) );//场景从下移入推出原场景
需webgl支持
cc.director.runScene( new cc.TransitionCrossFade(3.0, new Scene() ) ); //淡出淡入交叉,同时进行
cc.director.runScene( new cc.TransitionPageTurn(3.0, new Scene(), false ) ); //翻页,前翻
cc.director.runScene( new cc.TransitionPageTurn(3.0, new Scene(), true ) ); //翻页,后翻
cc.director.runScene( new cc.TransitionFadeTR(3.0, new Scene(), true ) ); //向右上波浪
cc.director.runScene( new cc.TransitionFadeBL(3.0, new Scene(), true ) ); //向左下波浪
cc.director.runScene( new cc.TransitionFadeUp(3.0, new Scene(), true ) ); //向上百叶窗
cc.director.runScene( new cc.TransitionFadeDown(3.0, new Scene(), true ) );//向下百叶窗
cc.director.runScene( new cc.TransitionTurnOffTiles(3.0, new Scene(), true ) ); //随机小方块
cc.director.runScene( new cc.TransitionSplitRows(3.0, new Scene(), true ) ); //按行切
cc.director.runScene( new cc.TransitionSplitCols(3.0, new Scene(), true ) );//按列切
使用cc.director.runScene进行场景切换会销毁旧场景的所有内容。下次回到该场景时,所有内容都需要重新建立。
想象一下你在玩游戏的时候,如果想把背景音乐或者音效关掉,你会跳到游戏的设置场景里,如果这时使用cc.director.runScene进行场景的切换,那么你在返回游戏时,游戏的数据将会全部丢失,因为游戏场景早已被销毁了。
若不想旧的场景被销毁,可以使用 pushScene + popScene 的组合来进行场景的来回切换。
pushScene //用新的场景覆盖当前场景。当前的场景会被暂停,但不会被销毁。相当于把当前的场景数据保存起来。
popScene //销毁当前的场景,恢复旧场景的运行。
例子:
cc.director.pushScene( new SceneB() ); //进入场景B cc.director.popScene(); //返回第场景A