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

时间:2010-08-08 15:31:54

标签: javascript html5 web-worker

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

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

1 个答案:

答案 0 :(得分:3)

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

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.
      }
   }
}

然后你为巡逻和可能的事件设置了一个webworker(你也可以调用webworker中的其他webworkers并处理巡逻事件)

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);

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