[场景切换器源码] Cocos Creator上实现了个支持带导航栈的场景切换器

刚开始看Cocos Creator,发现场景切换没有历史栈的概念,导致场景后退,场景之间传递参数等等,用起来不是很方便, 虽然官方建议使用常驻节点解决参数问题,但是感觉不是很好,
就自己写了个场景导航器解决了这些问题,直接源码吧,不啰嗦。

github地址:https://github.com/NeOEBoy/CCNavigator/
项目使用,直接把文件Navigator.js拽到自己项目使用。

/**

  • Navigator介绍:

  • 提供一个支持导航栈的Navigator类,支持以下特性
  • 0,记录场景切换的导航栈。
  • 1,场景之间可以传递参数,比如场景A要传个字符串给场景B。
  • 2,多个场景进入同一场景后,从场景返回前一个场景,不需要再判断前一个场景是谁,可以直接goBack返回。
  • 3,支持场景返回后页面数据恢复,比如场景A界面,输入框输入了一段文字,然后进入场景B,
  • 从场景B返回后可以恢复输入框文字(需要在场景A脚本实现固定接口支持)。
  • 4,兼容cc.director.loadScene调用,当场景切换不需要参数和保存状态时,可以直接使用cc.director.loadScene
  • Navigator会监听并将场景加入导航栈中。(不过不推荐直接使用cc.director.loadScene,没有以上特性)
  • Navigator使用方法:

  • a)在场景A向前加载新场景B[带参数][带回调]
  • /// 默认
  • navigator.navigate(‘B’);
  • /// [带参数]
  • let parameter = {};
  • parameter.title = ‘i am wang ronghui’;
  • navigator.navigate(‘B’, parameter);
  • /// [带回调]
  • navigator.navigate(‘B’, function(){
  •  /// 切换成功处理
    
  • });
  • /// [带参数] + [带回调]
  • let parameter = {};
  • parameter.title = ‘i am wang ronghui’;
  • navigator.navigate(‘B’, parameter, function(){
  •  /// 切换成功处理
    
  • });
  • ~如果有传递parameter需在相应B.js内部实现loadState(parameter, state)函数接收参数parameter。
  • ~如果要存储当前UI状态则实现saveState(state){ //将UI状态存储在参数state中,后续在loadState里恢复state }。
  • c)场景B向后返回前一个场景A
  • /// 默认
  • navigator.goBack();
  • /// [带参数]
  • let parameter = {};
  • parameter.title = ‘i am wang ronghui’;
  • navigator.goBack(parameter);
  • d)场景B向后返回指定名字场景A
  • /// 默认
  • navigator.goBackToScene(‘A’);
  • /// [带参数]
  • let parameter = {};
  • parameter.title = ‘i am wang ronghui’;
  • navigator.goBackToScene(‘A’, parameter);
  • e)场景B向后返回根场景
  • /// 默认
  • navigator.goBackToRootScene();
  • /// [带参数]
  • let parameter = {};
  • parameter.title = ‘i am wang ronghui’;
  • navigator.goBackToRootScene(parameter);
  • 注意事项:

  • 挂载到场景的Canvas的自定义脚本的名字,必须要和场景文件的名字一致,否则无法调用到loadState或者saveState

*/

Mark,等项目结束后,尝新。支持楼主

牛逼,顶上去

欢迎使用

github更新了下,1,修复loadState和saveState内部无法使用this问题。2,导航时可以判断是否形成循环导航,如果循环则回退处理。原文不知道为啥不能编辑,在这Mark下吧。