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