jsb_polyfill.js BUG报错

this.scheduleOnce(function() {
// 这里的 this 指向 component
console.log("===");
}, 2);

运行如上代码时报错,在浏览器中能成功打印,模拟器报错
JS Exception: this.scheduleCallbackForTarget is not a function, file: D:/CocosCreator/resources/cocos2d-x/simulator/win32//src/jsb__polyfill.js 35359行

我也遇到了,还有,多次使用this.schedule,没有在场景切换时销毁。

1赞

而且浏览器是好的,安卓原生才有问题

1赞

是的,浏览器可以,安卓原生和cocos的模拟器都不行
使用js的计时器也会报同样的错误
self.timer=window.setTimeout(function(){
console.log(“执行了”);
},5000);

你解决了吗?

@jare 帮看一下:grinning:

我自己重写了一下,就没问题了,等官方处理修完BUG删掉就好

//由UPDATE执行,原生环境下自带的schedule有问题
schedule: function(func, interval){
    let obj = {func, last:new Date(), interval};
    this.scheduleList = this.scheduleList || [];
    this.scheduleList.push(obj);
},

//由UPDATE执行,原生环境下自带的schedule有问题
scheduleOnce: function(func, delay){
    let obj = {func, last:new Date(), interval:delay, once:true};
    this.scheduleList = this.scheduleList || [];
    this.scheduleList.push(obj);
},

// called every frame, uncomment this function to activate update callback
update: function (dt) {
    if(this.scheduleList){
        let now = new Date();
        for (var i = 0; i < this.scheduleList.length; i++) {
            let scheduleObj = this.scheduleList[i];
            if(now - scheduleObj.last < scheduleObj.interval * 1000){
                continue;
            }

            scheduleObj.func();
            scheduleObj.last = now;

            if(scheduleObj.once){
                this.scheduleList.splice(i--, 1);
            }
        }
    }
},
1赞

感谢感谢:heart_eyes:笔芯

是哪个版本的 bug ?

1.62

我也遇到问题,请问现在解决了吗,还没解决的话,我先自己写一个。

目前暂时解决了。 看API发现scheduleCallbackForTarget是3.4被废弃的接口,所以加回去就可以了:
在jsb_polyfill.js中搜索scheduleCallbackForTarget,把那一行代码换成下面这个(添加了一个参数):
this.scheduleCallbackForTarget(callback, target, interval, repeat, delay, paused, target._intervalId);

然后在cocos/scripting/js-bindings/manual/cocos2d_specifics.cpp这个文件下加入这一句:
JS_DefineFunction(cx, tmpObj, "scheduleCallbackForTarget", js_CCScheduler_schedule, 2, JSPROP_ENUMERATE | JSPROP_PERMANENT);