2009-04-17 11 views
5

Así que estoy tratando de crear un motor de juego de subprocesos múltiples para el juego que quiero escribir. Hasta ahora, todo ha funcionado sin ningún problema, incluso sé qué pasos debo dar para terminarlo.¿Cómo mantengo sincronizados mis datos mundiales en un motor de juego de subprocesos múltiples?

Solo hay una cosa que no sé (bueno, técnicamente, conozco una solución para eso, pero espero que haya algo más elegante y más rápido): básicamente, tengo un hilo separado para cada parte de mi motor - Gráficos, de entrada, física, audio, etc.

el hilo de la física tiene una estructura completa nodo de escena del mundo, donde se simula todo. Sin embargo, ahora tengo que llevar esta estructura a mi hilo de gráficos, con la menor sobrecarga posible. Idealmente, solo debería transferir las partes que cambiaron desde la última actualización.

que tienen componentes en su lugar para la transferencia de estos datos, el único problema que está generando.

Hasta ahora, he pensado en dos enfoques diferentes:

  • copiar toda la estructura para cada actualización - muy simple, pero posiblemente intensife tiempo y la memoria (no tengo experiencia con grandes motores - habría esto sea viable?)
  • perder de vista que las partes de la escena cambió marcando los nodos de escena con algunas banderas, y sólo copiar sobre las partes cambiadas

enfoque se podría copiar una gran cantidad de memoria, pero sin mucho poder de procesamiento r, el acercamiento dos haría lo contrario: mucho poder de procesamiento, menos memoria copiada.

¿Hay alguna respuesta general que enfoque sería más rápido en un entorno típico de los juegos?

Respuesta

4

No, no hay una respuesta general aceptada, es un área actual de la investigación en el desarrollo de juegos.

Mis 2 centavos es la sabiduría convencional - cuál usar realmente depende de tu caso de uso específico - si tu juego tiene muchos datos (es decir, requiere mucha memoria, como la mayoría de los títulos exitosos), probablemente quieras solo transmite los cambios. Si su juego no requiere mucha memoria (por ejemplo, juegos de arcade), probablemente pueda salirse con la suya copiando todo el objeto.

me gustaría sugerir la implementación de ambos y conectar temporizadores de rendimiento para ver cuál funciona mejor para usted; es posible implementar una arquitectura que pueda manejar ambos métodos de forma transparente.

+0

alguna teoría: velocidad de transferencia máxima de memoria RAM DDR2-1066 es 8533 MB/s, y quiero al menos 100 ciclos por segundo, por lo tanto, una actualización tiene que ser menor que 85 MB. Un nodo de física debería tener al menos 32 bytes (28 para la posición y orientación, y un mínimo de 4 para una ID única), si usa 32 bits como identificadores. Asumiendo 10.000 objetos, esto significaría 312,5 kB para copiar por actualización (0,3% del máximo) Sin embargo, esto no incluye la sobrecarga para la jerarquía de nodos. Debería ser fácilmente posible. – Mononofu

Cuestiones relacionadas