Hola.
Ayer a media tarde me quedé sin internet y no ha estado arreglado hasta esta mañana, por eso anoche no estuvieron los servidores.
No os limitéis a hacer una sola prueba, yo por ejemplo antes de ayer cuando lo estuve preparando por la mañana iba perfecto sin ningún tipo de baile y con el coche pegado al culo con predicción de grado 1, pero luego por la tarde con la misma versión y los mismos ordenadores para conectarme (cliente con jazztel 20 megas y servidor con ono 50 megas) la conexión iba bastante mal con los coches bailando sin parar. Es el problema de las pruebas que dependen completamente de como se comporte internet en ese momento.
Esta versión si ponemos la predicción de grado 0 con el divisor a 1.0 es exactamente la versión RC4, por lo que no podemos hablar de que esta versión es peor, por que no toca nada respecto a la otra, simplemente nos permite jugar con dos parámetros pero el resto es idéntico a la RC4
Voy a explicar un poco mejor los parámetros:
GRADO DE PREDICCIÓN:Como su nombre indica es una función matemática que utilizo para adivinar en que coordenadas creo que estará el coche remoto cuando reciba su trama.
GRADO 0: No utilizo ninguna función para calcular donde creo que estará el coche, lo que hago es que en el momento de recibir la trama con la posición de un coche remoto calculo la velocidad y dirección que tengo que aplicar a ese coche para que cuando llegue la próxima trama (en teoría dentro de 60 milisengundos) el coche esté en la posición que había recibido antes.
Por ejemplo y usando solo una coordenada para no liar, un coche remoto está en X=90 y me llega una trama que dice que ese coche ahora está en X=100 lo que hago es calcular la velocidad del coche para que dentro de 60ms el coche haya llegado a X=100 y en teoría en ese momento recibiré una nueva trama con la posición en la que está ahora el coche (digamos X=112) y volveré a calcular que velocidad le tengo que aplicar para que dentro de 60ms el coche esté en ese X=112.
Este método hace que el coche se mueva suave, pero tiene una gran pega el coche siempre va 60ms por detrás más lo que tarde en llegar la trama, porque cuando nos llega una trama no ponemos el coche en esa posición (porque el coche daría un salto) si no que calculamos la velocidad para que dentro de 60ms el coche llegue a ese punto. Por eso he añadido la predicción
GRADO 1: Utilizamos una función matemática que dadas las dos últimas posiciones que hemos recibido del coche calculamos/predecimos cual será la próxima que recibiremos de forma que nos anticipamos a lo que ha de venir para que el coche remoto no vaya siempre por detrás debido al tiempo en llegar las tramas. El problema es que esto es una predicción y muchas veces no se cumple (cada vez que se cambia la aceleración o giro) lo que hace que el coche remoto vaya un poco loco porque ha ido a una posición que finalmente no se ha cumplido y ahora a de volver rápidamente a la posición correcta.
Lo de aumentar el grado de la función lo que hacemos es que en vez de usar solo las dos últimas posiciones recibidas de ese coche usamos 3 (grado 2) o 5(grado 3) pero ha quedado demostrado que es peor porque la predicción tiene demasiada "memoria" de lo que pasó antes y los cambios de aceleración o dirección cuestan más de hacer por lo que nos alejamos demasiado de la posición real.
Ahora que ya sabemos que es GRADO 0 y GRADO 1 podéis apreciar que es mucho más interesante usar una función de predicción porque si no los coches remotos siempre van demasiado retrasados respecto a la posición real, pero el problema de usar predicción es que nos podemos equivocar demasiado y eso lo he intentado solucionar con el otro parámetro, el divisor de la predicción
DIVISOR DE PREDICCIÓNComo ya hemos visto antes lo que hago con el online es calcular una velocidad y dirección que aplicaré a cada coche remoto hasta que llegue la siguiente trama con su posición para volver a calcular un nuevo incremento y dirección. En el caso de no usar predicción siempre vamos a coordenadas que sabemos que son correctas porque las hemos recibido directamente desde el jugador remoto por lo que los incrementos serán correctos siempre que la siguiente trama con la nueva posición llegue en el tiempo que esperamos, 60 milisegundos porque si tarda más de 60ms estaremos aplicando una velocidad y dirección al coche que quizás ya no es la correcta. Aunque el problema gordo lo encontramos al usar predicción que además del problema de que la siguiente trama tarde más de la cuenta también tenemos el problema de haber calculado una dirección que no es correcta (por ejemplo el coche estaba acelerando y calculamos una coordenada bastante lejos de la posición actual pero en ese momento el coche ha frenado y la siguiente coordenada estará mucho más cerca de lo que creíamos).
¿ Y como resuelvo esto ? Pues reduciendo la velocidad y dirección que he calculado para no pasarnos. De esta forma cuando llegue la próxima trama no habremos llegado a la posición y por lo tanto si tarda un poco más en llegar o la posición no era correcta del todo la rectificación que tenemos que hacer no es tan grande, porque no hemos llegado a ese punto, aunque como problema tenemos que el coche siempre va un poco más retrasado de lo que debería aunque mucho menos que por ejemplo la diferencia entre usar predicción y no.
Este valor lo que hace es dividir los incrementos de velocidad y dirección, de forma que si ponemos 1.20 estamos reduciendo en un 20% estos valores, mientras que si lo dejamos en 1.00 vamos al punto que hemos calculado y si ponemos valores menores a 1 como por ejemplo 0.75 lo que hacemos es ir un 25% más lejos de lo que habíamos calculado.
¿ Que buscamos ?Buscamos el mínimo valor del DIVISOR usando la predicción de GRADO 1 (las de grado superior las he descartado porque van muy mal) para que el coche no baile demasiado. Como he comentado cuanto más grande sea el DIVISOR más lejos estará la posición real del coche remoto, por lo que interesa poner un valor bajo, pero si ponemos un valor muy bajo nos "tragaremos" todas las malas predicciones y retardos de tramas por lo que hay que ir aumentando el valor para que filtre esos casos pero sin pasarnos para no tener una posición del coche remoto demasiado lejana.
¿ Y como lo hacemos ?Pues lo mejor para hacer pruebas es mirar nuestro coche Ping porque así podemos ver realmente cuanta diferencia hay con la posición real y además ver si el coche baila demasiado o va suave.
Como el buen funcionamiento del online depende de como vaya internet y también del servidor de la partida os recomiendo hacer varias pruebas a distintas horas/dias y si es posible con distintos servidores y no creer que una configuración en concreto es una porquería porque en ese momento vaya mal.
Esta mañana he probado mi servidor y funcionaba bastante mal, pero ahora mismo lo acabo de probar y va perfecto, y no he cambiado nada.
De las pruebas que he hecho casi me decanto más por un DIVISOR de 1.15 que el de 1.20 ¿ Que opináis vosotros ?
Saludos