Cocos2d-JS 使用 scheduler 小结

主要分为两种方式,一种是直接用延时函数,比如scheduleCallbackForTarget,scheduleOnce等,另外一种就是在每帧的更新函数里面进行控制。


1.第一种直接使用函数的方式:

    这里只谈使用要注意的地方,至于函数参数,官方的API文档介绍的已经很清楚了(API查询地址:http://www.cocos2d-x.org/reference/html5-js/V3.0/index.html    在左上角输入cc.scheduler )


以this.scheduleOnce(回调函数,延迟时间)为例,这里要注意的是回调函数的使用。

1.1当回调函数为无参时,如:
[javascript]  view plain copy
  1. noParameter : function() {  
  2.         cc.log("NO parameter !!");  
  3.     },  
那么用的时候写函数名,不带括号而使用了(假如延迟时间为3秒):
[javascript]  view plain copy
  1. this.scheduleOnce(this.noParameter, 3);//回调函数带不带this视其作用域而定  

1.2当回调函数为有参时:,如:
[javascript]  view plain copy
  1. haveParameter : function(i) {     
  2.         cc.log("Hava parameter " + i);  
  3.     },  
那么使用的时候为了能正常延时,需要在外面套一层function name(){},再调用,不然就会在程序一开始时运行,没有延时效果,不过这样做,实际上变成了上面无参时的情况,在一个无参的函数里面调用其他函数而已:
[javascript]  view plain copy
  1. this.scheduleOnce(function a() {  
  2.                 this.haveParameter(1111);//回调函数带不带this视其作用域而定  
  3.             }, 5);  



2.第二种在每帧更新函数里进行控制:

以layer为例,在初始化的时候(ctor函数return true 前,onEnter等其他地方也可以,不过最好在初始化时)添加:
[javascript]  view plain copy
  1. this.scheduleUpdate();//表示使用每帧更新函数  
接着重写layer的update方法:(这里先定义了一个作用域在layer的变量time)
[javascript]  view plain copy
  1. update : function(dt) {  
  2.        this.time += dt;//dt为每一帧执行的时间,把它加起来等于运行了多长时间  
  3.        if(this.time > 7){  
  4.            cc.log("每7秒显示一次");  
  5.            this.time = 0;//每7秒重置为0,以达到循环显示  
  6.        }  
  7.        //cc.log(this.time);//time的当前时间  
  8.    },  

你可能感兴趣的:(Cocos2d-JS 使用 scheduler 小结)