Question

Je pense à développer un jeu en JavaScript pur et html5, sans utiliser de plug-ins tiers. Le problème que je suis confronté est que je ne peux pas trouver un moyen de séparer les différents « modules » du jeu en fils séparés, comme le travail rendu, la logique du jeu, le chargement d'actifs et ainsi de suite.
Les travailleurs Web semblent être en mesure de séparer le code en fils différents, mais le problème avec eux est le peu d'informations que je peux passer entre eux. Par exemple, pour le rendu d'emploi, je dois passer tout le « monde », avec toutes les entités, des mailles, des textures et ainsi de suite pour chaque mise à jour du jeu, parce que les threads de travail ne peut pas mémoire partagée. Il peut être optimisé, comme l'envoi de l'électricité statique des objets que l'initialisation (maillages, textures), puis envoyer seulement l'état d'un objet sur la mise à jour (il Transformons monde), mais il est toujours pas souhaitable.

Est-il possible d'envoyer des données volumineuses entre eux ou leur faire partager des objets? Ou est-il une autre méthode tout à fait de parvenir à un vrai multithreading? Je sais qu'il ya des moyens plus simples d'y parvenir en utilisant des plugins / engins mais je dois utiliser uniquement les méthodes disponibles en web open;

Était-ce utile?

La solution

Worker Web JavaScript est un meilleur modèle de programmation simultanée d'une certaine façon. Par exemple, il est l'événement entraîné et il n'y a aucun objet partagé. Cela signifie que vous ne pouvez pas entrer dans la grille de verrouillage (parce qu'il n'y a pas de verrou du tout) et un objet ne peut pas entrer dans un état non valide en étant modifiée par deux threads en même temps.

Le problème est que vous ne pouvez pas empiler facilement système de jeu traditionnel sur le dessus de ce modèle. Donc, vous devez concevoir le système de jeu dans une nouvelle façon d'adopter ce modèle de programmation, et je pense que cela pourrait être coûteux.

Autres conseils

Vous voulez probablement regarder dans les Web Workers, je n'ai aucune expérience avec eux, mais ont entendu parler d'eux. Pourriez-vous conduire dans la bonne direction.

http://ejohn.org/blog/web-workers/

web travailleurs sont la chose la plus proche de multithreading js.
À l'heure actuelle.
Arrêt complet.

Sans travailleurs Web il n'y a aucun moyen de faire multithreading en javascript que je connais.

Vous pouvez utiliser une logique de donner la priorité combien de temps devrait être consacré à faire certaines tâches, cependant. Vous pouvez faire des fonctions qui stockent des informations dans les états (si les boucles peuvent être sortis, puis repris remonter à une date ultérieure). Chaque boucle sait combien de temps il a avant qu'il enregistre l'état et de sortie de la fonction.

Ainsi, la boucle aurait une condition de temps aussi ...

//Loop over some iterator, exit if time is up
for (i = 1; i < max || timeNotUp(); i++)
{
}

//If exiting normally 
if (i == max)
{ //do somthing
}
//otherwise, save state
else
{
    this.i = i;
    this.otherStuff = otherStuff;
}

Vous pouvez certainement donner la priorité votre code de cette façon. Mais, il y a des inconvénients. Enregistrer votre état ne conduit pas à nettoyer le code facile à suivre (en particulier avec des boucles dans les boucles). Il est pas aussi rapide, puisque vous vérifiez constamment le temps et sauver les états.

Je recommande une approche fonctionnelle pour composer les aspects de votre jeu. Voir par exemple http://www.flapjax-lang.org .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top