cocos2d-js 定時器

1.scheduleUpdate

節(jié)點中有scheduleUpdate接口,通過這個接口,可以讓游戲在每幀執(zhí)行都執(zhí)行update方法

var ScheduleUpdateLayer = cc.Layer.extend({
    ball:null,
    ctor:function () {
        this._super();
        this.scheduleUpdate(); // 開啟定時器

        var winSize = cc.director.getWinSize();
        var ball = new cc.Sprite("res/item_2.png");
        ball.x = winSize.width/2;
        ball.y = winSize.height/2;
        this.addChild(ball);
        this.ball = ball;

        cc.eventManager.addListener({ // 監(jiān)聽鼠標事件
            event:cc.EventListener.MOUSE,
            onMouseDown:function (event) {
                var action = cc.moveTo(1,event.getLocation().x,event.getLocation().y);
                ball.runAction(action);
            }
        },this)
    },

    update : function () { // 重寫update方法
        console.log(this.ball.x+"---"+this.ball.y);
    }
})

2. scheduleOnce

scheduleOnce和setTimeout類似,接受兩個參數(shù),第一個參數(shù)是回調(diào)函數(shù),第二個參數(shù)是事件,scheduleOnce接受的時間以秒為單位。
節(jié)點都有scheduleOnce接口。

var ScheduleLayer = cc.Layer.extend({
    ctor:function () {
        this._super();

        this.scheduleOnce(function () {  // 2秒后打印日志
           console.log("scheduleOnce");
        },2);
    }
})

3. schedule

schedule和setInterval類似,實現(xiàn)固定時間間隔不斷觸發(fā)某個函數(shù)的功能。
node.schedul(callback, interval, repeat, delay)
interval觸發(fā)間隔,以秒為單位
repeat重復(fù)次數(shù),會執(zhí)行repeat+1次
delay是第一次出發(fā)前的延遲時間,以秒為單位
如果希望schedule無限循環(huán),可以省略后兩個參數(shù),也可以設(shè)置repeat為常量cc.REPEATE_FOREVER

this.schedule(function () {
            console.log("schedule");
        },2,cc.REPEAT_FOREVER,2);

schedule基于幀數(shù)控制,當幀頻降低時,schedule會積累大量的誤差
一個平衡的定時器

schedule2:function (callback,interval) {
        var then = Date.now();
        interval = interval*1000;
        this.schedule(function () {
            var now = Date.now();
            var delta = now-then;
            if(delta > interval){
                then = now - (delta % interval); //如果本次觸發(fā)延遲了,就讓下次觸發(fā)早一點來抵消誤差
                callback.call(this);
            }
        }.bind(this),0); // 0表示每幀觸發(fā)
    }

4. 取消定時器

  • 取消scheduleUpdate ,使用 node.unscheduleUpdate()
  • 取消scheduleOnce和schedule,使用node.unschedule()
var ScheduleLayer = cc.Layer.extend({
    ctor:function () {
        this._super();
        this.schedule(this.tick,1,cc.REPEAT_FOREVER,1);
        this.tickCount = 0;
    },
    tick:function () {
        console.log("tick");
        this.tickCount++;
        if(this.tickCount == 5){
            this.unschedule(this.tick);
        }
    }
})

5.暫停/恢復(fù)定時器

node.pause();  //暫停
node.resume(); //恢復(fù)

參考資料 Cocos2d-JS開發(fā)之旅 鄭高強著 電子工業(yè)出版社

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,632評論 19 139
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,988評論 0 3
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,446評論 6 13
  • Timer 定時器相信都不會陌生,之所以拿它來做源碼分析,是發(fā)現(xiàn)整個控制流程可以體現(xiàn)很多有意思的東西。 在業(yè)務(wù)開發(fā)...
    石先閱讀 6,506評論 2 13
  • 現(xiàn)在是一個寒冷的夜晚,依然是屬于自己一個人的空間。我們放下本性,放下準繩,放下自在。但是永遠放不下心里面那曾經(jīng)...
    夜的傾聽閱讀 284評論 0 0

友情鏈接更多精彩內(nèi)容