7

我正在开发一款具有 AI 逻辑、动作等和绘图功能的游戏。使用 Web Workers 计算移动和 AI 逻辑是否有意义?但是我该怎么做——因为工作人员需要非常了解主线程,比如某些对象的碰撞位置、子弹数量等。感觉不可能,因为工作人员与主线程完全分开没有任何访问权限。我确实知道有一个 postMessage() 系统,但感觉如此......嗯,痛苦吗?

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

4

1 回答 1

3

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

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 中调用其他 webworker 并处理巡逻事件)

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 实际上是一个架构决策,如果要使用它们,将涉及大量重构。如果没有重构,我怀疑它对您是否有用。

于 2010-08-08T16:05:47.877 回答