当前位置:首页 > 旅游 > CocosCreator开源游戏框架(七) 场景管理器 SceneManager

CocosCreator开源游戏框架(七) 场景管理器 SceneManager

关键词:   发布时间:2019-08-08 08:00:01

场景管理器的职责:

  • 场景切换之前对旧场景上的资源进行引用计数减一

  • 场景切换之后对新场景上的资源进行引用计数加一

  • 场景切换之后根据资源使用情况释放不需要的资源

  • 负责两个场景之间的切换

  • 负责两个场景之间的数据传递

场景切换时资源管理

  • 场景切换之前,对旧场景上的资源进行引用计数减一

  1. cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LOADING, (event, dat)=> {

  2.    if (!this.dependAssets) {

  3.        return;

  4.    }

  5.    bb.UILoader.releaseArrayRes(this.dependAssets);

  6.    this.dependAssets = null;

  7. });

  • 场景切换之后,对新场景上的资源进行引用计数加一并释放资源

  1. cc.director.on(cc.Director.EVENT_AFTER_SCENE_LAUNCH, (scene: cc.SceneAsset) => {

  2.    if (!scene["dependAssets"]) {

  3.        this.dependAssets = null;

  4.        return;

  5.    }

  6.    this.dependAssets = scene["dependAssets"];

  7.    bb.UILoader.retainArrayRes(scene["dependAssets"]);

  8.    bb.UILoader.gc();

  9. });

场景控制器组件和场景逻辑组件

每一个场景都有一个场景控制器,负责一个场景切换的基本功能。重新定义场景组件的生命周期,并在声明周期中加入两个周期 onEnter 和 onExit 周期。此时整个场景的生命周期变为:

  • onLoad

  • start

  • onEnable

  • onEnter

  • onExit

  • onDisable

  • onDestory

  1. export default class SceneCtrl {

  2.    name: string = "";

  3.    data: any = null;

  4.    logicComponet: SceneComponent = null;

  5. }

  6. export default class SceneComponent extends cc.Component{

  7.    sceneCtrl: bb.SceneCtrl = null;

  8.    initBind() {

  9.        bb.UIBind.bindComponent(this);

  10.    }

  11.    onEnter() : void {

  12.    }

  13.    onExit() : void {

  14.    }

  15. }

切换场景

在此和场景有个约定, 每个场景的根节点必须挂载一个继承 场景逻辑组件基类(bb.SceneComponent)的类,而每一个继承场景逻辑组件的基类的子类都会有一个场景控制组件(bb.SceneCtrl), 而 SceneCtrl 负责整个场景的声明周期的控制。

  1. loadScene(scene: string, data: any) {

  2. 相关内容
分享 2019-08-08 08:00:01

0个评论

文明上网理性发言,请遵守新闻评论服务协议