引擎组大大帮忙看看 cc.Scheduler: Illegal target which doesn't have uuid or instanceId.

自己写一个自定义计时器
window.CountDownSchedule = cc.Class({
extends:cc.Component,
properties: {
_lastUpdate: null,
m_observers: null,
m_groupTag: null,
},

__ctor__: function (groupTag = 0) {
    this.m_groupTag = groupTag ? groupTag : 0;
    this.m_observers = [];
    this._lastUpdate = (new Date()).getTime();
},

onUpdateTime: function (dt) {
    var now = (new Date()).getTime();
    var deltaTime = (now - this._lastUpdate) / 1000;
    this._lastUpdate = now;

    if (g_countDownScheduleManager.isGroupPause(this.m_groupTag)) {
        return;
    }

    for (var i = 0; i < this.m_observers.length; i++) {

        if (this.m_observers[i] && this.m_observers[i].update) {
            this.m_observers[i].update(deltaTime);
        }
    }
},

scheduleOpt: function (callback, interval, key) {
    if (this.m_observers.length <= 0) {

        this._lastUpdate = (new Date()).getTime();
        cc.director.getScheduler().schedule(this.onUpdateTime.bind(this), this, 0.1, cc.REPEAT_FOREVER, 0, false, 'update');
    }

    var obj = new CountDownObserver(callback, interval, key);
    this.m_observers.push(obj);
},

isScheduled: function(key) {
    for (var i = 0; i < this.m_observers.length; i++) {
        if (this.m_observers[i].m_key == key) {
            return true;
        }
    }

    return false;
},

unscheduleOpt: function (key) {
    for (var i = 0; i < this.m_observers.length; i++) {
        if (this.m_observers[i].m_key == key) {
            this.m_observers.splice(i, 1);
            break;
        }
    }
},

unscheduleAll: function () {
    cc.director.getScheduler().unscheduleAllForTarget(this);
    this.m_observers.length = 0;
},

});

再外面调用scheduleOpt 报错误


引擎组大大帮忙看看。

完整的类如下:

window.CountDownSchedule = cc.Class({
extends:cc.Component,
properties: {
_lastUpdate: null,
m_observers: null,
m_groupTag: null,
},

__ctor__: function (groupTag = 0) {
    this.m_groupTag = groupTag ? groupTag : 0;
    this.m_observers = [];
    this._lastUpdate = (new Date()).getTime();
},

onUpdateTime: function (dt) {
    var now = (new Date()).getTime();
    var deltaTime = (now - this._lastUpdate) / 1000;
    this._lastUpdate = now;

    if (g_countDownScheduleManager.isGroupPause(this.m_groupTag)) {
        return;
    }

    for (var i = 0; i < this.m_observers.length; i++) {

        if (this.m_observers[i] && this.m_observers[i].update) {
            this.m_observers[i].update(deltaTime);
        }
    }
},

scheduleOpt: function (callback, interval, key) {
    if (this.m_observers.length <= 0) {

        this._lastUpdate = (new Date()).getTime();
        cc.director.getScheduler().schedule(this.onUpdateTime.bind(this), this, 0.1, cc.REPEAT_FOREVER, 0, false, 'update');
    }

    var obj = new CountDownObserver(callback, interval, key);
    this.m_observers.push(obj);
},

isScheduled: function(key) {
    for (var i = 0; i < this.m_observers.length; i++) {
        if (this.m_observers[i].m_key == key) {
            return true;
        }
    }

    return false;
},

unscheduleOpt: function (key) {
    for (var i = 0; i < this.m_observers.length; i++) {
        if (this.m_observers[i].m_key == key) {
            this.m_observers.splice(i, 1);
            break;
        }
    }
},

unscheduleAll: function () {
    cc.director.getScheduler().unscheduleAllForTarget(this);
    this.m_observers.length = 0;
},

});