还是定时器的问题,没有太理解。

我是仿照了官方使用定时器写的。
otherMonster.scheduleOnce(function () {
this.doRefreeze();
}, 3);
这个是写在碰撞事件里的。this.doRefreeze()是otherMonster里面的一个函数。
在我使用这个执行一次的定时器的时候,我发现我再次执行一次这个定时器,他的时间不会添加,而是又添加了一个定时器。
我现在想实现的目的是添加了一个定时器以后,在某一个特定条件下,在这个基础上增加这个定时器的时间。
一开始我是想取消定时器然后重新加一个定时器,使用unschedule,但是不可以。
在我使用unscheduleAllCallbacks();就可以实现。但是这个函数是取消了所有的定时器,不太符合要求。
想问一下应该怎样实现增添原有定时器的时间,或者是取消掉当前的定时器,再次添加新的定时器。

是的,每次 schedule 都会重新添加

是这样没错

应该这样做,需要注意的是,unschedule 和 schedule 时传递的函数对象应该是同一个:

var callback = function () {
    this.doRefreeze();
};
otherMonster.scheduleOnce(callback, 3);
otherMonster.unschedule(callback);

谢谢回复:grin:。你们的回复总是很及时,给了很大的帮助。
另外,如果这样写
otherMonster.scheduleOnce(this.doRefreeze(), 3);
otherMonster.unschedule(this.doRefreeze());
这个传递的函数对象不属于一个吗?

还有一个小问题。编辑器有时候会报出rangeerror maximum call stack size exceeded错误,
控制台不输出了。这个是我代码部分的错误吗?点击看不到错误的地方。

:joy:我犯2了,明白了那个问题出在哪了。
rangeerror maximum call stack size exceeded这个错误一般是什么引起的?

这是调用堆栈溢出,无限循环调用会导致这个问题