吐槽一下 cc.director.getScheduler().schedule() API 的可选参数 paused !!!

我当时的代码需求是做一个下一帧执行。
但是呢,在自定义类里再搞一个 Component 然后再去用 scheduleOnce,就有点绕。

所以我就直接用 cc.director.getScheduler().schedule() 来做了。
(记得在自定义类里添加 cc.director.getScheduler().enableForTarget(this)

.
下面是我的被坑过程…
.

可以看到,上面的 paused 是可选参数。


再参考上面 scheduleOnce 的实现所以这样写应该没问题吧:

但是实际效果就像后面的注释一样,wtf?我就开始怀疑起了人生…
昨天写代码写到凌晨,本来心态就有点崩,又遇到这个问题,我直接就炸了…
好在后面绕过了下一帧执行的代码需求。

今天早上想研究一下到底是为啥?心态已经平稳下来的我看到源码就特么傻了 :sob::grimacing:

那你还让 paused 参数可选个屁啊!API 文档写全点会死啊!

仔细看有6个参数

主要是他们把 paused 设置为可选参数,那我不填不应该影响我已填参数的使用意图。
但实际上是,如果你不填 paused 那么 API 内部会修改你的使用意图,这就有点操蛋了…
所以回过头来疑问:那还把 paused 设置为可选参数干嘛?:angry:

似乎可以直接用afterUpdate回调?

这个paused无论我怎么填都是没用的,一开始就会执行。哎,但是pauseTarget又是能暂停计时器的,不懂为什么注册的时候没用

我发现解决办法了,在注册定时器之前先用cc.director.getScheduler().pauseTarget(this);就可以让他不会注册完就运行

我也用过这个API,确实有点坑:grinning:

奇了个怪,3.1的代码也是这个样子