Anuncios Google

[PREGUNTA] Libreria para fisicas determinista

Buenas, quiero hacer un juego online con fisicas realistas (en la medida de lo posible). Hasta ahora siempre he venido utilizando Box2D para mis proyectillos cutrosos y siempre eran sin multiplayer... todo correcto, mu bonito y mu hermoso... pero, leyendo bien las caracteristicas de esa libreria que venia usando desde hace tiempo me encuentro con el dato de que no es determinista [Los resultados para las mismas condiciones pueden no ser los mismos dependiendo del procesador o el compilador usado].. entonces, pregunto: ¿Existe algun metodo, truco, configuracion, compilador... llamale X que genere binarios que manejen los floats siempre de la misma manera, aun perdiendo precision? ¿Existe alguna libreria para trabajar en 2D tipo Box2D pero que sea determinista?

Tambien queria saber, porque me imagino que con este tipo de cosas habran trabajado ya muchisimas personas antes que yo.... ¿Importa realmente este aspecto a la hora de crear mi juego? Quiero decir... ¿es tan problematico? porque poder puedo ir sincronizando el estado del objeto del servidor en mi cliente.... pero claro, aun no lo he testeado en entornos con mucho lag, que seguramente es donde se note la difirencia en la resolucion de las colisiones y movimientos de los objetos.

 

Gracias!


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Determinismo.

Sinceramente, los motores de físicas no son deteministas, pero casi. Quiero decir, por supuesto depende de la precisión que uses para representar un float, pero se supone que no vas a compilar la versión 1.0 con el gcc y la 1.1 con un compilador de los 80, por ejemplo. Normalmente la precisión no cambiará. En cualquier caso, si vas a hacer un juego en red, en mi opinión, olvidate del determinismo. Aunque tuvieses un motor determinista, tendrías incongruencias: imaginate los 2 jugadores están corriendo para coger un arma que hay en medio. De repente el jugador 1 se para, pero hay un poco de lag y el jugador 2 ve en su pc que el 1 ha cogido el arma aunque no es así. Ya te imaginarás la de casos que se pueden dar con el lag (y sin el lag, con unos milisegundos la cosa ya camiba).

En fin, semejante rollo para decirte como me imagino yo que se suele hacer: suponiendo que tengas un servidor y 2 clientes jugando, en el servidor tienes un modelo completo del juego, que simula las físicas y que manda la posición de los objetos a los clientes. Los clientes a su vez envian al servidor acciones de los usuarios. Por supuesto la conexión no es tán rapida como para que eso solo valga, así que también tienes que "falsear" las físicas en los clientes. Por ejemplo, mueves el jugador que a su vez se choca con una caja, con lo que envias la orden de mover el jugador al servidor y mientras eperas recibir la actualización de la posición de la caja, simulas la posición calculando las físicas en el cliente también. Pero en todo momento el servidor es el que manda, así que cuando el servidor envíe la posición real de la caja, se corregirá en el cliente.

Lo dicho, que no te alarmes tanto por si no es 100% determinista, a no ser que sea un juego del tipo angri birds, es decir, que no sea interactivo.

Un saludo!


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Gracias, no conocia esta

Gracias, no conocia esta libreria le echare un vistazo!

 

Segun estoy leyendo por el foro de dicha libreria... comentan que alcanzar tal grado de determinismo es basicamente "inviable"... lo que me lleva a la segunda parte de mi primer comentario xD

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.