我知道定时器node.schedule(callback)的时候,如果callback需要参数,可以用匿名的方式,如
node.schedule(function(){
callback(args);
});
但这样写的话因为匿名,导致在node.unschedule(???)时,这里不知道该怎么填了。
所以我现在怀疑人生的地方是:不知道是我传参的方式可以不用匿名,还是有别的停止定时器的方式?(用node.unscheduleAllCallbacks()倒是一种方法,但如果我这个node上恰好还有别的定时器需要正常执行,那这个方法就不适用了)
除了function应该还要传个key之类的参数吧,没用过不太清楚。。
schedule的参数里面确实有个key,我开始也觉得可以用key来找,但后来发现在unschedule的参数里并没有key的用法,所以schedule里面的这个参数貌似并没有什么用……
根据我的个人经验,使用setTimeout setInterval 或者 node.runAction 来达到延时的目的 会比schedule 要好用。
因为我遇到过schedule调用或释放频繁,会有错误发生。 只是如果你用setTimeout setInterval 要注意自己处理 节点被移除的时候 自己clear 定时器.
这是我项目里的用法 供参考:
BaseSceneObj._delayCall = function (fun, time, params, ctx) {
var _self = this;
setTimeout(function () {
if(_self._destroyed) return;
if (fun) {
fun.apply(ctx || this, params);
}
}, time);
};
感谢指点。
其实我个人也觉得setTimeout和setInterval比较好用,毕竟它俩都有返回值,可以用它们的返回值来clear掉。只是我是做jsb开发的,目前还不确定在native下setTimeout和setInterval有没有用(我记得在某本cocos2d-js的书上看过说jsb下不能用,但也听网友说jsb下添加了原生的实现,不过我没有亲自验证)
我看了下c++源码,有方法的: void unschedule(const std::string& key, void *target)
jsb当然可以用 我就是做jsb开发