Worker 这个东西是不是有BUG。

就想简单的使用

没有简单的例子。不过我估计是你的 worker 没加载引擎。

要怎么加载引擎呢

worker 启动时不是要传入一个脚本吗?这个脚本应该是引擎之类的,或者带有引擎

确实,我传入了一个脚本,但是打包之后的脚本,被添加了部分内容。里面有全局变量,直接执行失败

能不能有其他联系方式,我想反映一下这个问题,我在找其他方式解决这个问题,但是有机会我还是希望使用 web worker

推荐在论坛反馈,这样大家才能搜索得到。web worker 中使用 creator 我也没尝试过,你自己研究下吧。估计可行性不高,因为 web worker 无法操作 dom。

Worker跟creator没毛线关系,
你把它当成一个黑盒子,里面的东西跟你外面的代码是完全隔绝的,只是通过消息传递参数和结果。
盒子里的所有变量跟外边没关系。

2赞

你的道理我都懂,可以我发现代码被加入了全局变量的判断

那你定义好全局变量啊

用Blob动态生成Worker示例:

function workerThread() {
  self.onmessage = function(e) {
    setTimeout(function() {
      self.postMessage('Received from main: ' + e.data);
    }, 1000);
  };
}
var blob = new Blob([workerThread.toString() + ";workerThread();"],{type:"text/javascript"});
var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage=function(e){console.log("Received from worker: " + e.data);};
worker.postMessage("Hello");

把你的计算函数放到workerThread里即可,这样不受Creator打包的影响。

5赞

谢谢你,爱你一万年

这种方法,用来处理一些东西非常好用,但是worker的域却是比较蛋疼的。
比如说,如果出现了需要require的内容

这样就能访问全局变量了?

不能呀,他本来也不想访问全局变量,只是他的做法是把Creator编译后的某个js(http://localhost:7456/preview-scripts/assets/Script/*.js)放到Worker里运行(因为Worker只能运行.js文件不能运行一个函数或类),这个编译后的js包含一些Creator的全局变量(是Creator打包时加的,他不需要的,他只想要js脚本里的计算函数),但Worker里访问不到全局变量,就报错了。我这样就是把他的计算函数通过字符串发到Worker里运行,不受Creator打包影响。全局变量可以通过主线程postMessage到Worker线程。

嗯嗯123

哥 你没用过 那你切换页面时 怎么保持runloop继续运行 是怎么做的?

这个问题我也遇到了,同样的问题,吧他改为插件脚本,这样就不会被cocos编译也就不会调用CC_EDITOR这个变量就没有问题了

具体为什么就不知道CC_EDITOR 为什么是undefine

blob这个方法构建出一个js文件,然后用这个js路径构建worker,学到了学到了