2012-02-28 16 views
5

Actualmente estoy en la etapa de planificación de un juego 2D para dispositivos móviles que haré en C++ utilizando cocos2d-x. El juego se basará en turnos y cada turno tendrá una fase en la que se llevarán a cabo las simulaciones físicas. También será multiplataforma.Redes físicas basadas en turnos basadas en varios jugadores

Soy nuevo en las redes multijugador y me pregunto cuál sería la mejor forma de sincronizar la física ya que Box2d no se comporta exactamente igual en diferentes dispositivos.

La simulación no tiene que ocurrir simultáneamente en cada dispositivo, pero sí necesito que los resultados sean exactamente los mismos. Idealmente, los jugadores podrán presenciar, en su propio dispositivo, la misma simulación física (es decir, movimiento de proyectil, rebote, colisiones) y el resultado que ocurrió durante el giro de sus oponentes cada vez que deciden comenzar su propio turno.

¿Cuál sería la mejor manera de hacerlo? De mi investigación, he llegado a un par de soluciones. ¿Debo escribir algún código de servidor en el que tomaría la entrada del usuario y manejaría toda la simulación física, y luego enviaría los resultados a cada dispositivo? o ¿hay alguna forma de manejar la simulación en un dispositivo y enviar toda la información al otro?

¿Cómo exactamente uno envía todo lo que sucede durante una simulación a través de la red ya que no puedo ejecutar la simulación en cada dispositivo y puedo garantizar los mismos resultados? ¿Acabo de actualizar el servidor (o dispositivo) con información de lo que ocurre durante cada pocos pasos de tiempo?

También consideraría implementar mi propia detección de física/colisión.

Respuesta

0

Si los diferentes dispositivos no pueden ejecutar la simulación y obtienen los mismos resultados, eso está solucionado. Debe ejecutar el simulador en un solo lugar y distribuir los resultados.

¿En uno de los dispositivos o en un servidor por separado? ¿Sería significativamente más fácil implementar el sim en un servidor separado? Si es así, entonces hazlo; si no, entonces no hay razón para involucrar una máquina extra.

El esquema de actualización que sugiere es un buen punto de partida. No es necesario que incluya todo que ocurra durante el turno, solo lo que la rutina de visualización necesita para mostrar la acción al usuario. Comience con intervalos de tiempo pequeños (lo que significa una gran cantidad de datos), luego amplíelos hasta que las imágenes empiecen a sufrir.

Cuestiones relacionadas