Pregunta

Estoy pensando en desarrollar un juego en puro JavaScript y HTML5, sin usar complementos de terceros. El problema que me enfrento es que no puedo encontrar una manera de separar diferentes "módulos" del juego en hilos separados, como el trabajo de renderizado, la lógica del juego, la carga de activos, etc.

Los trabajadores web parecen ser capaces de separar el código en diferentes hilos, pero el problema con ellos es la información limitada que puedo pasar entre ellos. Por ejemplo, para el trabajo de renderizado, necesito pasar todo el "mundo", con todas las entidades, mallas, texturas, etc. para cada actualización del juego, porque los hilos de trabajadores no pueden compartir memoria. Se puede optimizar, como enviar los objetos estáticos solo en la inicialización (mallas, texturas) y luego enviar solo el estado de un objeto en la actualización (es transformación mundial) pero aún no es deseable.

¿Hay alguna forma de enviar grandes datos entre ellos o hacer que compartan algunos objetos? ¿O existe un método diferente para lograr una verdadera verdadera lectura múltiple? Sé que hay formas más fáciles de lograr esto usando complementos/ engranajes, pero necesito usar solo métodos disponibles en Open Web;

¿Fue útil?

Solución

El trabajador web de JavaScript es un mejor modelo de programación concurrente de alguna manera. Por ejemplo, está impulsado por el evento y no hay objeto compartido. Esto significa que no puede entrar en el bloqueo de la cuadrícula (porque no hay bloqueo en absoluto) y un objeto no puede entrar en un estado no válido al ser modificado por dos hilos al mismo tiempo.

El problema es que no puedes apilar fácilmente el sistema de juego tradicional en la parte superior de este modelo. Por lo tanto, debe diseñar el sistema de juego de una nueva manera para adoptar este modelo de programación, y creo que esto podría ser costoso.

Otros consejos

Probablemente desee buscar trabajadores web, no tengo experiencia con ellos, pero he oído hablar de ellos. Podría llevarte a la dirección correcta.

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

trabajadores web son lo más parecido a la lectura múltiple en JS.
En este momento.
Parada completa.

Sans Work Workers No hay una forma real de hacer múltiples lectura en JavaScript que conozco.

Sin embargo, podría usar algo de lógica para priorizar cuánto tiempo se debe dedicar a ciertas tareas. Puede realizar funciones que almacenen información en los estados (por lo que los bucles podrían salir y luego recogerse en un momento posterior). Cada bucle solo sabe cuánto tiempo tiene antes de ahorrar su estado y sale de la función.

Entonces, el bucle para el bucle también tendría una condición de tiempo ...

//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;
}

Definitivamente puede priorizar su código de esta manera. Pero, hay inconvenientes. Guardar su estado no conduce a un código limpio y fácil de seguir (especialmente con bucles dentro de los bucles). Tampoco es tan rápido, ya que constantemente revisas el tiempo y el ahorro de estados.

Recomiendo un enfoque funcional para componer los aspectos de su juego. Ver EG http://www.flapjax-lang.org.

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