将Web Workers用于游戏是否有意义?

Tow*_*wer 6 javascript html5 web-worker

我正在开发一款具有AI逻辑,动作等和绘图的游戏.使用Web Workers计算移动和AI逻辑是否有意义?但是我该怎么做 - 因为工人需要了解主线程,如碰撞的某些物体的位置,子弹的数量等等.这感觉是不可能的,因为工人与主线完全分开什么都没有访问.我知道有一个postMessage()系统,但感觉如此......嗯,痛苦?

例如,我有一个步枪对象代表一个具有精灵,位置,健康等的步枪兵.我希望他巡逻.那么,我如何在工作人员上执行巡逻代码?它几乎需要对该对象的整个访问.

BGe*_*sen 3

我认为在游戏中使用 WebWorkers 确实有意义,但是,这意味着您必须保留一个游戏状态对象,该对象可以转换为有效的 JSON,您可以将其传递给 WebWorkers。好的一面是,您还可以将大量内在数据放入这些网络工作者中。

var gameState = {
   sprites: {
      {
         type: 'rifleman',  // damage, accuracy, speed etc set inside appropriate webworker.
         owner: 'playerA', 
         x: 100,
         y: 100,
         z: 0,
         level: 1, // used to fetch modifiers to dmg, acc, speed etc.

      },
      {
         // each sprite it's own state obj.
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

然后您设置一个用于巡逻和可能发生的事件的网络工作人员(您也可以在网络工作人员内部调用其他网络工作人员并处理巡逻事件)

var patrolWorker = new WebWorker('patrolWorker');
patrolWorker.onmessage = function(e){
   render(e.data); // your render function, can ALSO be a webworker if you like ;)
}
patrolWorker.postMessage(gameState.sprites);
Run Code Online (Sandbox Code Playgroud)

现在必须清楚,使用 WebWorkers 实际上很大程度上是一个架构决策,如果要使用它们,将涉及大量重构。如果没有重构,我怀疑它对你根本没有用。