Worker 这个东西是不是有BUG。

(function(){
    "use strict";var__module=CC_EDITOR?module: {
        exports: {
            
        }
    };var__filename='preview-scripts/assets/Script/GoBang/Test/bridge.js';var__require=CC_EDITOR?function(request){
        returncc.require(request,
        require);
    }: function(request){
        returncc.require(request,
        __filename);
    };function__define(exports,
    require,
    module){
        "use strict";cc._RF.push(module,
        'bdfd8/q5axIGIUQExh3ku5u',
        'bridge',
        __filename);
// Script/GoBang/Test/bridge.js

CC_EDITOR 报告错误。这个是全局变量啊。

重新描述一下
我希望在coocs creator使用web worker ,因为我们本身就只发布h5的东西,不太考虑原生平台的

这个时候我发现,如果不给正确的地址我无法访问到js文件所以我的路径上添加了已经打包了的内容:
./preview-scripts/assets/Script + 脚本

当不在报告404错误的时候

告知:Uncaught ReferenceError: CC_EDITOR is not defined

查看打包文件发现头部被修改了,添加判断全局变量CC_EDITOR

求告知。web worker 在Cocos Creator 上的使用

感谢21L的大大,解决了相关问题。爱你一万年

报告什么错误?

为此折腾了一晚上了,如果是BUG,请问怎么修复,如果不是的话。麻烦告知一声

      我需要跑一个AI

new Worker(aiPath);
我获取了路径"./preview-scripts/assets/Script/XXX.js
然后跑

try catch没有出现异常

在谷歌浏览器上报告CC_EDITOR 没有定义
查看报错文件,发现内部添加了部分的内容
也许是底层的内容。现在请问怎么处理这个

Uncaught ReferenceError: CC_EDITOR is not defined

Worker线程不能访问全局变量和函数。

怎么操作的?worker 加载引擎了吗?啥都不说清楚

嗯,CC_EDITOR 就是一个全局变量
不清楚cocoscreator 的web worker 怎么使用的。

或者说,我希望使用到异步的内容
我的AI很慢,需要时间

就想简单的使用

没有简单的例子。不过我估计是你的 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的内容