博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos creator切换场景闪退_CocosCreator 加载与切换场景、定时器的使用 (第七篇)
阅读量:5481 次
发布时间:2019-06-16

本文共 1792 字,大约阅读时间需要 5 分钟。

直接进入正题!

一、加载与切换场景

代码: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 。

本文同步分享在 博客“战 胜”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

转载地址:http://dezct.baihongyu.com/

你可能感兴趣的文章
微软超过苹果 成为全球第一大市值公司
查看>>
GitHub启用安全告警功能
查看>>
从 Google 的一道面试题说起·
查看>>
重构到更深层的模型
查看>>
服务应该去版本化,不管是微服务还是SOA
查看>>
Istio v1.0服务网格发布,各特性已生产就绪
查看>>
13岁女孩因发布JavaScript无限循环代码被捕
查看>>
知道大数据却不清楚工业大数据,知识架构“欠”在哪里?
查看>>
Docker周报:Windows Server将支持Mesos
查看>>
《码出高效:Java开发手册》背后的故事
查看>>
Oracle的Java模块化系统保卫战
查看>>
苹果开源Swift基准测试套件
查看>>
Java程序员:不要因未知而让云成本大涨
查看>>
QCon上海2015 架构实战热点前瞻
查看>>
python学习笔记-使用@property、setter、deleter
查看>>
EF Core数据库Provider一览
查看>>
Ceylon语言加入Eclipse基金会
查看>>
阿里云Redis开发规范
查看>>
滴滴自研分布式NoSQL数据库Fusion的演进之路
查看>>
软件安全访谈:ZipSlip、NodeJS安全性和BBS攻击
查看>>