2010-08-08 5 views
6

Je travaille sur un jeu qui a une logique IA, un mouvement, etc. Est-il logique de calculer la logique de déplacement et d'intelligence artificielle en utilisant Web Workers? Mais comment puis-je faire cela - parce que les travailleurs ont besoin de savoir beaucoup sur le fil principal comme les positions de certains objets pour les collisions, la quantité de balles, etc .. Cela semble impossible parce que le travailleur est complètement séparé du fil principal. pas d'accès quoi que ce soit. Je sais qu'il y a un système postMessage(), mais ça fait si ... euh, c'est douloureux? Par exemple, j'ai un objet rifleman qui représente un fusilier avec un sprite, une position, une santé, etc. Je veux qu'il patrouille. Alors, comment puis-je faire ce code de patrouille sur un travailleur? Il faudrait à peu près tout l'accès à cet objet.Est-il sensé d'utiliser Web Workers pour un jeu?

+1

Je ne suis pas sûr du contexte: Si la question est très spécifique aux jeux, il pourrait être une bonne idée de demander sur http://gamedev.stackexchange.com –

Répondre

3

je pense qu'il est logique d'utiliser WebWorkers pour un jeu, mais oui, il signifie que vous devrez garder un objet d'état de jeu qui peut être converti en JSON valide que vous pouvez passer à webworkers. Sur le brightside, vous pouvez également mettre beaucoup de données intrinsèques à l'intérieur de ces web workers.

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

vous mis en place un Webworker pour les événements de patrouille et possibles (vous pouvez appeler d'autres webworkers l'intérieur d'un Webworker ainsi et les événements de patrouille de processus)

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

Il doit être clair maintenant, que l'utilisation WebWorkers est en fait une décision architecturale, si vous voulez les utiliser, cela impliquera beaucoup de refactoring. Sans le refactoring, je doute que ce soit utile pour vous.

+0

Pour le jeu si avec beaucoup d'objets, l'état du jeu que est stocké comme un tableau de nombres peut-être préféré puisque vous évitez les données -> JSON -> chaîne de conversion de données. –

Questions connexes