我正在做一个游戏,有AI逻辑,运动等和绘图。使用Web Workers计算移动和AI逻辑有意义吗?但我该怎么做呢--因为工作线程需要知道太多关于主线程的信息,比如碰撞的某些物体的位置,子弹的数量等等。这感觉不太可能,因为工作线程完全独立于主线程,没有任何访问权限。我确实知道有一个postMessage()系统,但感觉很...嗯,很痛苦吗?
例如,我有一个步枪手对象,它代表一个拥有精灵的步枪手,位置,健康等。我想让他巡逻。那么,我该如何对工作人员执行巡逻代码呢?它几乎需要访问该对象的全部权限。
发布于 2010-08-09 00:05:48
我认为在游戏中使用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.
}
}
}然后设置一个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实际上在很大程度上是一个架构决策,如果你想使用它们,它将涉及到大量的重构。如果没有重构,我怀疑它对你有什么用处。
https://stackoverflow.com/questions/3434878
复制相似问题