Есть ли смысл использовать веб-работники для игры?

StackOverflow https://stackoverflow.com/questions/3434878

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top