2010-08-08 9 views
6

Estoy trabajando en un juego que tiene lógica, movimiento, etc. y dibujo. ¿Tiene sentido calcular el movimiento y la lógica de AI usando Web Workers? Pero, ¿cómo hago eso? Porque 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 sin acceso, lo que nunca. Sé que hay un sistema postMessage(), pero eso se siente tan ... umm, ¿es doloroso?¿Tiene sentido usar Web Workers para un juego?

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

+1

No estoy seguro del contexto: si la pregunta es muy específica para los juegos, podría ser una buena idea preguntar en http://gamedev.stackexchange.com –

Respuesta

3

Creo que tiene sentido usar WebWorkers para un juego, pero sí, significará que tendrá que mantener un objeto de estado del juego que se puede convertir a JSON válido que puede pasar a los trabajadores web. En el lado positivo, también puede poner una gran cantidad de datos intrínsecos dentro de esos webworkers también.

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

continuación, se configura una Webworker para eventos de patrullaje y posibles (se puede llamar a otros webworkers dentro de un Webworker así y eventos proceso 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); 

Debe convertirse en claro a estas alturas, que el uso de WebWorkers es en realidad una decisión arquitectónica, si desea usarlos, implicará una gran cantidad de refactorización. Sin la refactorización, dudo que sea útil para usted en absoluto.

+0

Para el juego si hay muchos objetos, el juego indica que se almacena como una matriz de números tal vez preferida ya que se evitan los datos -> JSON -> cadena de conversión de datos. –

Cuestiones relacionadas