Pergunta

Estou trabalhando em um jogo que tem lógica de IA, movimento, etc. e desenho. Faz sentido calcular a lógica móvel e a IA usando trabalhadores da web? Mas como faço isso - porque os trabalhadores precisam saber muito sobre o fio principal como as posições de certos objetos para colisões, quantidade de balas, etc. Parece impossível porque o trabalhador é completamente separado do tópico principal com o fio principal com Sem acesso o que nunca. Eu sei que existe um sistema PostMessage (), mas isso parece tão ... umm, doloroso?

Por exemplo, tenho um objeto de espingarda que representa um espingarda com sprite, posição, saúde etc. Quero que ele patrulhe. Então, como faço esse código de patrulha em um trabalhador? Precisaria praticamente todo o acesso a esse objeto.

Foi útil?

Solução

Eu acho que faz sentido usar os webworkers para um jogo, mas sim, isso significa que você terá que manter um objeto de estado de jogo que possa ser convertido em JSON válido que você pode passar para os webworkers. No Brightside, você também pode colocar muitos dados intrínsecos nesses web trabalhadores.

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.
      }
   }
}

Em seguida, você configura um webworker para patrulhamento e possíveis eventos (você também pode chamar outros webworkers dentro de um webworker e processar eventos de patrulha)

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);

Até agora, deve ficar claro que o uso de web trabalhadores é realmente uma decisão arquitetônica, se você quiser usá -los, isso envolverá muita refatoração. Sem a refatoração, duvido que seja útil para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top