Есть ли смысл использовать веб-работники для игры?
-
26-09-2019 - |
Вопрос
Я работаю над игрой, которая имеет логику AI, движение и т. Д. и рисовать. Есть ли смысл рассчитать перемещение и логику AI, используя веб-работники? Но как мне это сделать - потому что рабочие должны столько знакомить о главном потоке, таких как позиции определенных объектов для столкновений, количества пуль и т. Д. Это похоже на невозможное, потому что работник полностью отделен от основной нити с Нет доступа к тому, что так иначе. Я знаю, что там система Postmessage (), но это чувствует себя так ... ммм, больно?
Например, у меня есть объект Rifleman, который представляет собой Rifleman с спрайтом, положением, здоровью и т. Д. Я хочу, чтобы он был патрулировать. Итак, как мне сделать этот патрулирующий код на рабочем? Это понадобится в значительной степени весь доступ к этому объекту.
Решение
Я думаю, что это имеет смысл использовать 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 для патрулирования и возможных событий (вы можете позвонить другим WebWorkers внутри 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 на самом деле очень сильно архитектурное решение, если вы хотите их использовать, он будет включать много рефакторинга. Без рефакторинга я сомневаюсь, что это полезно для вас вообще.