模拟器上运行的schedule移除后仍执行数次

onLoad: function () 
    {
        this.progress = 0;
        this.needTime = 0.2;
        this.schedule(this.exploring,1/60);
    },
    exploring:function()
    {
        this.progress += 1 / 60 / this.needTime;
        cc.log(this.progress)
        if(this.progress >= 1)
        { 
            this.unschedule(this.exploring)
            cc.log("complete")
        }
    },

运行结果:

像上面的代码,理论上不是应该在this.progress >= 1的时候就不再执行exporing函数了吗,
但是却有一定概率在this.progress >= 1的时候仍继续执行,如果我把interval值改的更小一点,更是会出现更多次,移除后还继续执行几次函数.浏览器上则没问题。

怀疑是原生版本的 scheduler 实现上的问题,我们检查看看,多谢反馈!

在 Schedule 的回调中去 unschedule 的确可能出现这个问题,根本原因可能是你的帧率不够导致的。

你设置的 schedule interval 是 1/60 s,在帧率比较低的情况下,比如 30 fps,每帧会执行两次 exploring,第一次调用即便 unschedule 了,还是会执行补完的第二次。

所以确认一下,出问题的时候你的 fps 大概是多少?

用模拟器不知道在哪里看,但用浏览器运行显示的是60FPS,也没改过设置,话说也没去了解能不能改。
运行在mac上,电脑性能应该完全没问题。
意思是如果设置的interval低于默认的fps就可能导致unschedule失败,或者说在interval低于运行时的fps。
如果前者还可以理解,后者的话,意思说只要用户的设备性能比较差,就可能导致unschedule失败?
这样算不算个大问题