Имеет ли смысл использовать Web Workers для игры? - PullRequest
6 голосов
/ 08 августа 2010

Я работаю над игрой, в которой есть логика ИИ, движения и т. Д. И рисование.Имеет ли смысл рассчитывать перемещение и логику ИИ с помощью веб-работников?Но как мне это сделать - потому что рабочие должны знать так много о главном потоке, как положение определенных объектов для столкновений, количество пуль и т. Д. Это кажется невозможным, потому что рабочий полностью отделен от основного потока снет доступа, что так всегда.Я действительно знаю, что есть система postMessage (), но она кажется такой ... хм, болезненной?

Например, у меня есть объект стрелка, который представляет стрелка со спрайтом, положением, здоровьем и т. Д.Я хочу, чтобы он патрулировал.Итак, как мне сделать этот код патрулирования на работника?Для этого потребуется почти весь доступ к этому объекту.

1 Ответ

3 голосов
/ 08 августа 2010

Я думаю, что имеет смысл использовать 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.
      }
   }
}

затем вы настраиваете веб-работника для патрулирования и возможных событий (вы также можете вызывать других веб-работников внутри веб-работника и обрабатывать события патрулирования)

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 на самом деле является в значительной степени архитектурным решением, и если вы хотите их использовать, оно потребует большого количества рефакторинга. Без рефакторинга, я сомневаюсь, что это вам вообще пригодится.

...