Exacto, eso también lo pensé pero también pensé en las colisiones.
En el caso de que tome una coordenada futura tomando en consideración el intervalo de tiempo (para mantenerlo en tiempo real, ya que de lo contrario estaría atrasado por un segundo) este daría problemas con las colisiones ya que el coche seguiría de largo un segundo hasta que se de cuenta que colisiono xD
Aunque, de igual forma enviando vectores para un evento de movimiento, nunca en la vida el vector enviado (el que se reproduce en los otros clientes) va a ser igual al movimiento que estas realizando (Angulo de giro), se va a notar la diferencia.
Aunque, la forma mas razonal seria esa, ya que enviar un dato de posición por cada pixel que cambie.... No pasan dos segundos cuando el vps ya quede colgado y el servidor casi que te escupe en la cara (si pudiera) y te diría las palabras mas bajas que te puedas imaginar.. xDD
En fin, tendré que ver como hacer eso en todo caso si quiero que el juego fuera "entretenido", algo es algo.
Bien pensado lo de las colisiones, no se me habia ocurrido...
Se me ha ocurrido otra forma, que incluso me parece mejor y también podría aplicar yo a Nails jaja.
En lugar de vectores, que como has dicho no parece funcionar muy bien, podrías enviar las coordenadas cada X intervalo de tiempo.
Estas coordenadas las recibe el servidor, y las remite a los demás.
Cada cliente por tanto tiene coordenadas de un jugador cada X tiempo.
Estas coordenadas las metes en una cola (¿conoces las colas? Basicamente es una lista donde el primero que entra es el primero que sale).
De forma que se van acumulando ahí:
Por ejemplo: Un usuario se mueve de [2:3] a [5:3] y luego a [8:4], eso se envía al servidor, la distancia temporal entre cada envío es X.
Los demas clientes reciben esos datos con una distancia temporal X.
Eso lo almacenas así: [2:3] [5:3] [8:4], y además tienes como dato la direccion origen (en la que estaba el cliente que envió los paquetes antes de moverse) que seria: [0:0] por ejemplo.
Ahora solo te faltaría una funcion que dibujase la trayectoria desde [0:0] a [2:3], cuando termine, la dibuja desde [2:3] hasta [5:3] y cuando termine la dibuja de [5:3] a [8:4]. Todas las trayectorias serían lineas rectas.
Pero claro, en el juego no todo serán lineas rectas ¿Como se arregla esto?. Cuanto mas pequeño sea el intervalo de tiempo X entre la emisión de coordenadas por parte del cliente, mas real será el movimiento. Cuanto mas grande. mas irreal.
El sistema de colisiones sería parte del cliente, y no del servidor. El cliente del personaje que se esta moviendo conoce la coordenada real donde esta posicionado su jugador. Y a la vez conoce las coordenadas de los objetos sobre los que puede colisionar. Según el personaje se mueva comprueba si esta colisionando, y si lo hace envía la posición donde colisionó al servidor, sin tener en cuenta el intervalo de tiempo que ha pasado desde la ultima información. De esta forma tendrías el sistema funcionando y me parece mucho mas factible y real que lo de los vectores.
El problema es que como todos sabemos, los clientes se pueden hackear. Si te hackean el sistema de colisiones estarían moviendose por donde quisieran. (no es muy complicado hackear un sistema así). La solución sería que el servidor vaya comprobando que todas las posiciones que le van mandando sean coherentes y tengan sentido (por ejemplo que no haya atravesado ninguna pared). Esto tampoco me parece que sea muy dificil de implementar (Obviamente el servidor necesitará una copia del mapa).
En fin! Este sistema me parece mucho mejor. Estoy por ponerlo a prueba incluso en Nails! jaja
Un saludo, espero haberte ayudado

En cualquier caso si se te ocurre algo mas no dudes en seguir la conversacion! Parece interesante
