¿Trabajadores web para simulación física de juegos HTML5?

12

Un poco relacionado con esta pregunta .

La idea es garantizar el mismo comportamiento físico tanto como sea posible. ¿Sería posible ejecutar física de pasos de tiempo fijo en un trabajador web? La interfaz de usuario se actualizaría con una frecuencia de actualización diferente / variable.

¿Alguien ha intentado ya?

Petteri Hietavirta
fuente
¿Qué supone ganar con el uso de un trabajador web? Hasta ahora mi respuesta sería, eso funcionará, pero ¿por qué molestarse?
aaaaaaaaaaaa

Respuestas:

3

Encontré este experimento . Ejecuta la física de Box2d en un trabajador web. Todavía no he comprobado en detalle cómo se soluciona los problemas mencionados en los comentarios de Vincent Scheib.

Petteri Hietavirta
fuente
Buen experimento He estado siguiendo este tipo de proyectos también. Desafortunadamente, la mayoría todavía está vinculada a Java / C. Creo que OP está buscando una manera de lograr esto de forma nativa en el navegador (sin complementos).
Kevin Peno
2
Artículo sobre el mismo por un chico de google: t.co/AuhPptB
sorenbs
2

Esto podría funcionar, sin embargo, si WebWorkersigue el patrón del observador , la document(página html que posee el trabajador) solo puede escuchar y publicar mensajes a / desde un trabajador. A partir de eso, hay algunas opciones, supongo. En todos los casos, creo que necesitará encontrar alguna manera de determinar el FPS óptimo del agente de usuario para optimizar la información. Entonces podrías:

  • Indique a los trabajadores que publiquen mensajes en esos intervalos de tiempo.
    • Desventajas (s): debe suponer que documentestará listo para la respuesta cuando ocurra.
  • Dígale documentque envíe un mensaje al trabajador solicitando física en un intervalo de tiempo x, luego el trabajador publicará una respuesta (con suerte) poco después.
    • Desventajas (s): dado que todas las publicaciones y respuestas son asíncronas, puede haber demoras entre la solicitud y la respuesta del trabajador. En este caso, también tendría que anular el onmessageevento para evitar que documentescuche cuando no lo espera.

Estoy seguro de que hay otras cosas que me perdí o formas de manejar las comunicaciones también. ¡Esperaré otras respuestas sobre el tema yo mismo!

Kevin Peno
fuente
1
a) ¡Cuidado con el rendimiento! Considere requestAnimationFrame y señale un 'mantener vivo' a su trabajador, para que no queme CPU si la pestaña se coloca en segundo plano (tal vez por demasiado tiempo)
Vincent Scheib
b) IIRC Todos los mensajes del trabajador se recibirán en el hilo principal, se pondrán en cola. Piensa en el impacto que tendrá en tu hilo principal, si tienes 5 actualizaciones pero solo necesitas la última. Tampoco puedes decir que tienes más por venir.
Vincent Scheib,
c) Todos los mensajes están haciendo copias de datos. Cuantos más datos tenga que enviar entre subprocesos, más copia de datos y trabajo de recolección de basura. Por lo tanto, una ganancia aquí solo existirá si hay una alta relación de datos de cálculo / mensaje.
Vincent Scheib,
@Vincent, con respecto a B) es por eso que dije que siempre tendrías que estar documentlisto para encontrar un fps razonable o ir con la opción 2 donde el trabajador no hace nada hasta que lo documentpide.
Kevin Peno
2

Physijs utiliza un trabajador web. Pega la física de munición con los objetos Three.js y los actualiza según sea necesario. Cuenta con pasos de tiempo fijos y fluidos, creo

ebaum
fuente