cocos creator, js setInterval bug

因为特殊需求,我使用js的setInterval timer功能。
浏览器chrome, cocoscreator 1.9.1.
我浏览器关闭游戏之后,creator里游戏继续运行,并且timer一直存在,creator的控制台一直在刷log.

抱歉 Creator 现在并没有对用户的项目代码做沙盒保护,如果你要防止代码在编辑器中运行,
可以用 if (!CC_EDITOR) 进行过滤。

你在说什么?答非所问。
不负责任,你回答之前先想一下别人能看懂你的回复吗?
我提了一个timer的bug,你跟我提沙盒。。

莫名其妙就把问题给结了,这就是你们解决问题的态度?

定时器在我看来,属于沙盒的一部分。如果我这么理解是错的,不妨碍我的本意吧?总之,Creator 目前没有做到很严谨的防护。建议你用 if (!CC_EDITOR) 进行过滤。

我觉得加一个判断是最直接的做法,所以标记解决了。这样方便我们管理论坛。不过既然你觉得不能满意,为了表示歉意,我把问题重新打开了,欢迎其它人给出更多建议。

1赞

你没有明白@Jare大神的意思。Creator启动时和你每次保存代码之后,Creator都会编译运行一遍你的代码(以检查代码错误、识别组件的属性定义、识别Editor属性等等)。而你的代码和引擎代码在Creator编辑器中都是在同一环境下运行的。比如您在你代码的任意一个文件末尾打一行cc.log(123);(注意不是在写的类里面,而是文件最末尾),那每次保存代码的时候Creator控制台都能看到输出123。如果你把这个cc.log(123)换成一个setInterval,同样也会每次运行,且因为没有clearInterval,每次的setInterval会同时存在。
这个问题的根本原因就在于,你的代码每次刷新会在同一Creator的JS环境中执行一遍。这就是Jare说的没有做沙盒保护。解决方案就是你把你的setInterval用CC_EDITOR判断一下,在CC_EDITOR环境中不要执行。

if (!CC_EDITOR) {
    setInterval(...);
}
2赞

解释的到位,理解了,3Q

理解了,3Q。。
可是我提的bug是:关闭浏览器之后,代码会继续运行。
计算我加了if (!CC_EDITOR)也会继续运行,亲测。

贴代码看看呗。

赤裸裸的诠释了用户是大爷,问问题,不是应该抱着求教的态度嘛,一个三言俩与的描述,没有demo,没有代码,没有截图,就指望别人帮你解决问题?。。。何必惯着呢。

还是个特有脾气。。。的大爷

2赞