CocosCreator 加载与切换场景、定时器的使用 (第七篇)

直接进入正题!

一、加载与切换场景

代码:cc.director.loadScene("MyScene");

1. 通过常驻节点进行场景资源管理和参数传递

引擎同时只会运行一个场景,当切换场景时,默认会将场景内所有节点和其他实例销毁。如果我们需要用一个组件控制所有场景的加载,或在场景之间传递参数数据,就需要将该组件所在节点标记为「常驻节点」,使它在场景切换时不被自动销毁,常驻内存。

标记常驻节点:cc.game.addPersistRootNode(myNode);
取消常驻节点 :cc.game.removePersistRootNode(myNode);

需要注意的是上面的 API 并不会立即销毁指定节点,只是将节点还原为可在场景切换时销毁的节点。

2. 场景加载回调

代码:cc.director.loadScene("MyScene", onSceneLaunched);
上一行里 onSceneLaunched 就是声明在本脚本中的一个回调函数,在场景加载后可以用来进一步的进行初始化或数据传递的操作。
由于回调函数只能写在本脚本中,所以场景加载回调通常用来配合常驻节点,在常驻节点上挂载的脚本中使用

3. 预加载场景

后台静默加载新场景,并在加载完成后手动进行切换。

cc.director.preloadScene("table", function () {
   cc.log("Next scene preloaded");
});

之后在合适的时间调用 loadScene , 就可以真正切换场景。
cc.director.loadScene("table");
就算预加载还没完成,你也可以直接调用 cc.director.loadScene ,预加载完成后场景就会启动。


二、使用计时器

也许有人会认为 setTimeout 和 setInterval 就足够了,开发者当然可以使用这两个函数,不过我们更推荐使用计时器,因为它更加强大灵活,和组件也结合得更好!

首先,先创建一个指向某个组件的变量,变量名为 component

// 1. 开始一个计时器
 component.schedule(function() {
     // 这里的 this 指向 component
     this.doSomething();
 }, 5);// 计时器将每隔 5s 执行一次。

// 2. 更灵活的计时器
 var interval = 5;// 以秒为单位的时间间隔
 var repeat = 3; // 重复次数
 var delay = 10; // 开始延时
 component.schedule(function() {
     // 这里的 this 指向 component
     this.doSomething();
 }, interval, repeat, delay); // 10 秒后开始计时,每 5 秒执行一次,执行 3 + 1 次。

// 3. 只执行一次的计时器(快捷方式)
 component.scheduleOnce(function() {
     // 这里的 this 指向 component
     this.doSomething();
 }, 2);// 上面的计时器将在两秒后执行一次回调函数,之后就停止计时。


// 4. 取消计时器
// 开发者可以使用回调函数本身来取消计时器:
 this.count = 0;
 this.callback = function () {
     if (this.count === 5) {
         // 在第六次执行回调时取消这个计时器
         this.unschedule(this.callback);
     }
     this.doSomething();
     this.count++;
 }
 component.schedule(this.callback, 1);
 // 5. 取消组件所有的计时器
this.unscheduleAllCallbacks();

注意:组件的计时器调用回调时,会将回调的 this 指定为组件本身,因此回调中可以直接使用 this 。

发布了39 篇原创文章 · 获赞 48 · 访问量 9226

猜你喜欢

转载自blog.csdn.net/qq_45021180/article/details/104399828