cocos2d-js浅谈schedule的用法

很多童鞋对cocos2d-js中的定时函数很迷茫,不知道是用js自身的定时器比较好,还是用cocos2d自身提供的schedule更靠谱?从代码的可读性、拓展性及实用性上,建议大家统一使用cocos2d自身提供的schedule方法。下面就为大家深入浅出的介绍下schedule:

一、schedule 有三种不同的api:

1. scheduleUpdate():

2. scheduleOnce(callback, delay, key):

Parameters:

{function} callback

A function wrapped as a selector

{Number} delay

The amount of time that the first tick will wait before execution.

{String} key

The only string identifying the callback

3. schedule(callback, interval, repeat, delay, key):

Parameters:

{function} callback

A function wrapped as a selector

{Number} interval

Tick interval in seconds. 0 means tick every frame. If interval = 0, it's recommended to use scheduleUpdate() instead.

{Number} repeat

The selector will be executed (repeat + 1) times, you can use kCCRepeatForever for tick infinitely.

{Number} delay

The amount of time that the first tick will wait before execution.

{String} key

The only string identifying the callback


二、schedule三种api的使用:

1. scheduleUpdate()

以layer为例,在初始化的时候(ctor函数return true 前,其他地方也可以,建议在初始化时)添加:

        this.scheduleUpdate(); //开启每帧调用,对应update
接着重写layer的update方法:(这里先定义了一个layer的成员变量time)

    update: function(dt) {
        this.time += dt; //dt 为上一帧到当前帧的时长
        if (this.time >= 3) {
            cc.log("每3秒在调试框中输出一次");
            this.time = 0;
        };
    },

2. scheduleOnce(callback, delay, key)

以layer为例,在初始化或其他非解析方法内添加:

        //延迟2秒后,只执行一次
        this.scheduleOnce(this.once, 2);
接着新建一个once的方法:

    once: function() {
        cc.log("延迟2秒后,只执行一次");
    },

3. schedule(callback, interval, repeat, delay, key)

同样以layer为例,在初始化或其他非解析方法内添加:

        //不带参数的回调函数notParameter,延迟5秒后每2秒执行一次,累积执行20次
        this.schedule(this.notParameter, 2, 20, 5);

 
 
接着新建一个notParameter的方法:

    notParameter: function() {
        cc.log("不带参数的回调函数notParameter,延迟5秒后每2秒执行一次,累积执行20次");
    },

 

三、schedule的代码示例:

var test = cc.Layer.extend({
    time: 0,
    ctor: function() {
        this._super();
        this.time = 0;
        this.scheduleUpdate(); //开启每帧调用,对应update
        //不带参数的回调函数notParameter,延迟5秒后每2秒执行一次,累积执行20次
        this.schedule(this.notParameter, 2, 20, 5);
        //带参数的回调函数haveParameter,每1.5秒执行一次,累积执行10次
        this.schedule(function nothing() {
            this.haveParameter("带参数")
        }, 1.5, 10);
        //每5秒执行一次,无次数限制
        this.schedule(this.notRepeat, 5);
        //延迟2秒后,只执行一次
        this.scheduleOnce(this.once, 2);
        return true;
    },
    notRepeat: function() {
        cc.log("每5秒执行一次");
    },
    notParameter: function() {
        cc.log("不带参数的回调函数notParameter,延迟5秒后每2秒执行一次,累积执行20次");
    },
    haveParameter: function(s) {
        cc.log(s + "的回调函数haveParameter,每1.5秒执行一次,累积执行10次");
    },
    once: function() {
        cc.log("延迟2秒后,只执行一次");
    },
    update: function(dt) {
        this.time += dt; //dt 为上一帧到当前帧的时长
        if (this.time >= 3) {
            cc.log("每3秒在调试框中输出一次");
            this.time = 0;
        };
    },
    onExit: function() {
        this._super();
        this.unscheduleUpdate(); //移除schedule
        this.unschedule(this.notRepeat); //移除没有次数限制的schedule
        this.unscheduleAllCallbacks();//移除所有schedule的回调函数
    }
});




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值