Pregunta

Estoy trabajando en un juego que tiene lógica de IA, movimiento, etc. y dibujo. ¿Tiene sentido calcular la lógica de mudanza y IA utilizando trabajadores web? Pero, ¿cómo hago eso? Debido a que los trabajadores necesitan saber mucho sobre el hilo principal, como las posiciones de ciertos objetos para colisiones, cantidad de balas, etc. Se siente imposible porque el trabajador está completamente separado del hilo principal con No hay acceso. Sé que hay un sistema PostMessage (), pero eso se siente tan ... Umm, ¿doloroso?

Por ejemplo, tengo un objeto de fusilero que representa un fusilero con un sprite, posición, salud, etc. Quiero que patrulla. Entonces, ¿cómo hago ese código de patrulla a un trabajador? Necesitaría prácticamente todo el acceso a ese objeto.

¿Fue útil?

Solución

Creo que tiene sentido usar WebWorkers para un juego, pero sí, significará que tendrá que mantener un objeto de estado del juego que pueda convertirse en JSON válido que puede pasar a los trabajadores web. En el lado brillante, también puede colocar muchos datos intrínsecos dentro de esos trabajadores web.

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

Luego, configure un trabajo web para patrullar y posibles eventos (también puede llamar a otros trabajadores web dentro de un trabajo webworker y procesar eventos de patrulla)

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

Ahora debe quedar claro que el uso de los webworkers es en realidad una decisión arquitectónica, si desea usarlos, implicará mucha refactorización. Sin la refactorización, dudo que sea útil para ti.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top