cocos creator关于schedule的坑

在游戏开发中,经常会用到计时器,在cocos引擎中,为我们默认提供了多种计时器的使用。在最新的cocos开发工具Cocos Creator中,我们有4种计时器可以使用,分别是js自带的setTimeOut、interval以及cocos的schedule和scheduleOnce,setTimeOut和scheduleOnce都是执行几次操作,指定一定时间后执行,interval和schedule都是可以指定执行次数的。这里主要对schedule进行相关的说明,因为这里面有一个坑。

当我们将一个组件挂在是一个控件上后,例如,我们在一个飞机大战的游戏中,想创建子弹,就可以用schedule每隔一段时间进行创建,或者,每隔一段时间,进行一些其他的操作等。但是,最近在使用schedule的时候,发现了一个大坑,或许,也是自己对这个东西不熟悉,但不管怎样,还是将这个东西分享出来,方便他人的使用,防止别人入坑,也算是记录一下自己在开发中的心得。大家都知道,schedule一般可以传3或者4个参数,3个参数的使用如下:

component.schedule(function() {
     this.doSomething();
 }, interval, repeat);
如果就是当前的脚本中,就可以直接用this.schedule了,第一个就是回调方法,一般来说,如果要用当前组件中的方法,需要写成function(){}.bind(this)的形式,否则会报错,这里的interval当然是时间间隔,以秒为单位,每隔interval就执行一次,repeat就是重复执行的次数,默认情况下,当repeat为0的时候,会执行一次,这个repeat表示重复执行次数,是在已经执行过一次之后的重复次数,这点值得注意。还有一种用法,是延时执行的,用法如下:
component.schedule(function() {
     this.doSomething();
 }, interval, repeat, delay);
这里只不过是多了一个delay,别的没有什么区别,总共会执行里面的方法repeat+1次,第一次在delay时间之后执行,然后每隔interval秒执行一次里面的方法。然而,问题来了,如果将delay设置成0,是否会立刻执行呢?显然,并不是这样的!这就是这个计时器的坑。如果将delay置为0,默认情况下,第一次执行仍然会延时,而且延时时间是interval。因此,在开发中,如果要开启多个计时器,而且,每隔计时器的延时时间都不一样,但是,却有一定规律,例如,在for循环中创建5个计时器,每个计时器的delay = i;这样就会出问题,第一个计时器的delay设置为0,但是实际上变成了interval,为了避免这种事情发生,可以将让delay = i + 0.1,只要给一个初始的很小的值就好了,或者,判断一下,当i = 0 的时候,就不调用带delay的方法,直接调用第一个方法就行了,这样,就避免了这种问题的发生。
--------------------- 
作者:_Unique_ 
来源:CSDN 
原文:https://blog.csdn.net/u013152587/article/details/71105032 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值