[devLog] Parchis ( HTML, CSS,Javascript )

carra

#30 No hombre, no te quites valor. Además aquí el mérito está en no abandonar el proyecto 😉

Czhincksx

#30 nuestras texturas y físicas son gracias a que los motores gráficos nos lo ponen a huevo. Lo tuyo tiene mucho mérito.

1 respuesta
MisKo

#32 Que va, pero si los navegadores son como motores xDD

Para mover una cosa de un sitio a otro son 2 lineas y el navegador se encarga de todo, tiene 0 mérito xDDD

Dejo un par de videos de como he dejado de momento lo de los dados, que creo que hasta q no encuentre fallos o me vaya a poner con lo de 6 personas y 8 personas, no lo volveré a tocar xD

Desktop

Mobile

1
MisKo

Estoy haciendo un PONG con Godot a ver si me es facil implementarlo en la plataforma.

Lo que más duda me causa es la parte de la sincronización y controlar las cosas desde el server, así como poder obtener el identificador de la partida a la que vaya a conectarme... pero bueno, primero a ver si consigo tener el juego o algo "funcional" en godot y luego ya iré solucionando lo que pueda xD

MisKo

PONG

Bueno, ya tengo una primera version integrada en la plataforma y funcionando con multiplayer.

Al final, la parte de coger información de la plataforma para usarla desde GODOT no ha habido ningun problema, pensaba que iba a ser más porculero pero no xD

En la parte de los sockets, no he conseguido conectarlo a un servidor que utilice Socket.IO , aunque montando el servidor con WS directamente si me ha funcionado (creo que por algo de la implementación de SocketIO , que primero empieza vía AJAX y luego pasa a WS si el cliente lo soporta )

No he encontrado nada de información de GODOT conectando a un server con Socket IO, así que asumo que no es posible o que quien lo ha conseguido no lo ha posteado por ahi xDDD

Ahora vamos a lo importante :

El Multiplayer !

No tengo ni puta idea de como hacer que las cosas vayan bien sincronizadas, tengo 0 idea de networking xDD

Actualmente lo que tengo es jugable, cada Stick se controla vía sockets y la posicion, velocidad y ángulo de la pelota se establece vía sockets también.

A partir de ahí, se encarga GODOT de moverla, rebotar, etc.. y, cuando llega al final de la pantalla (porque no ha chocado en un stick para devolver la pelota), desde sockets vuelvo a configurar la pelota en el centro de la pantalla, su direccion, velocidad, angulo y demás, y vuelta a empezar.

Aunque esto como he dicho es funcional y es jugable la mayoría del tiempo, algunas veces se dan cosas raras (un jugador no llega a darle a la pelota y el otro jugador ve como si le ha dado por ejemplo).

Creo que esta forma de hacerla no es la correcta (prácticamente he probado lo que se me ha ocurrido sin mirar tutoriales xDDD)

Por un lado, mi mente piensa que todo se debería de hacer en el servidor (mover la pelota, los sticks, hacer los rebotes, etc...) y usar los clientes solo para pintar las cosas (estar recibiendo constantemente la posición de la pelota y los sticks) , pero no se si es lo correcto.

En el caso de hacerlo así, no tendría sentido que el servidor de los juegos no estuviera en Godot, porque desaprovechariamos lo que ofrece el motor (y para pintar las posiciones ni siquiera necesito godot xD).

En este último caso no se si tendría que instanciar un "servidor de godot" cada vez que se vaya a jugar una partida, o si todo se puede hacer en el mismo.

En lo referente al PONG que hay actualmente, quiero corregir unas cosas de crear/finalizar la partida (actualmente me toca borrarlo a mano en la ddbb) y a partir de ahí puedo dejarlo público para que hagais alguna prueba si quereis xD

Pues nada, seguiré informando de mis aventuras xD

4 1 respuesta
kidandcat

#35 Socket.IO es una implementación independiente, no es websockets, va por encima de websockets, entre otros

Puedes usar un servidor de godot para muchas partidas

1 respuesta
MisKo

#36 Será lo próximo que pruebe, montar el servidor con godot y conectarme a el, aunque antes dejaré visible la otra parte por si alguien quiere probarlo mientras hago lo otro, que no se lo que me llevará :D

MisKo

Pues como os comenté ayer, ya podeis probar el PONG en lo que cambio todo para hacerlo con un servidor de godot en vez de en nodejs y WS.

He aprovechado también y he agregado a la pantalla principal de la plataforma si un juego está en beta o no, el numero de jugadores para cada uno de ellos y para que plataformas está pensado.

A ver si no me lleva mucho el cambio de lo del servidor en godot :sweat_smile:

1
1 comentario moderado
Ridote

Me gustaría recalcar que te lo estás currando un huevo, que te está quedando súper guay y que sigas bien animado con lo que andas haciendo que mola muchísimo. Que hay gente que no escribe por aquí pero que te seguimos en las sombras.

1 respuesta
carra

#40 pues sí, para uno que avanza con su proyecto y enseña algo, tendremos que animarle!

1
B

Me gusta mucho lo que veo.

No tiene que ser nada fácil hacer tu solito una plataforma de juegos clásicos.

1
MisKo

Pues la idea es seguir siempre que tenga tiempo, me gusta mucho programar y la parte de videojuegos siempre me ha llamado, aunque no me dedico a ella, pero al menos en los ratos que me pongo me divierto : )

Conforme se me vayan ocurriendo juegos los programaré y los iré agregando a la plataforma y, si puedo, me gustariá acabar el año con unos 15 como mínimo (si puedo más, pues mejor xDDD)

La idea del pong y de godot era probar si me iba a resultar facil implementar juegos de Godot en la plataforma que ya tenia desarrollada ( usuarios, reglas, partidas publicas, partidas privadas, chat...)

Y la verdad que esa parte ha sido muy facil, así que estoy contento =)

Por lo demás, en local ya tengo el servidor de PONG montado en Godot, tambien he conseguido levantarlo con docker y además le he programado la creación de "salas" para que se puedan jugar varias partidas por separado.

Sobre el multiplayer de GODOT, aunque lo tengo funcionando creo que tengo que seguir viendo tutoriales o cosas asi. Tengo el movimiento de los personajes sincronizados, pero la pelota y sus velocidades/angulos se controlan desde el propio cliente y, aunque empiezan siempre con la misma velocidad y ángulo, luego parece que rebotan de forma distinta dependiendo del cliente.

Esto hace que me tenga que replantear como "sincronizar" la pelota entre todos los jugadores y no tengo ni puta idea xD pero bueno, al menos investigaré y listo.

Ya que estamos, dejo un video donde se ve el problema que menciono xDD

Por cierto, creo que tb es algo del framerate, que cuando tengo el foco en uno de los juegos, el otro baja de 60fps a 30fps y eso hace que se desincronice más, igual jugando 2 personas distintas no es tan basto como se vé ahi, tengo que probarlo xD

4
MisKo

Anoche ya subí una primera beta del PONG a https://pichesi.com donde ya va todo sincronizado.

Al final, despues de muchas pruebas y demás, opté por que todo fuera en el servidor ( básicamente, se "juega" allí ) y los clientes solo transmiten los inputs al server y mueven los sprites en base a lo que reciban.

No me llamaba mucho la idea al principio de hacerlo así, pero no conseguía que la pelota se sincronizara correctamente en ambos jugadores si el movimiento dependía del cliente.

Me quedan un par de retoques que afectan al inicio de cada punto, algo como que no se puedan mover los jugadores hasta que la pelota se ponga en movimiento por ejemplo, y luego tambien de poner algo tipo un "maximo" de puntos por "set" por llamarlo de alguna manera, para indicar quien es el ganador.

Por otro lado, me he separado del "pong" tradicional, haciendo que los personajes se puedan mover en las 4 direcciones (hasta la mitad del campo), así como que se puedan llegar a jugar partidas de 2 contra 2.

Hoy supongo que dejaré hechos los cambios que me faltan y tocaré un poco la velocidad de la pelota, de los jugadores y demás.

Tengo también pendiente agregar "algo" para que se pueda jugar desde movil, aunque eso lo tengo que investigar aun un poco xD

3 1 respuesta
kidandcat

#44 Es que lo que tienes que hacer es lo que tienes ahora. Y ahora que ya tienes todo moviéndose desde el servidor, metes predicción de movimiento y otras cosas.

Esta guia es muy buena: https://www.gabrielgambetta.com/client-server-game-architecture.html

Aunque tampoco tienes que montarte esa fumada para un ping pong, pero por aprender...

1 respuesta
MisKo

#45 Es que es un poco lo que tu dices, para "un ping pong" meter toda la partida en el server me parecía demasiado, pero no he conseguido cuadrar la sincro de la pelota de otro modo, así que al final es lo que me ha tocado hacer xD

Me miraré lo que me has pasado despues de comer =)

Y aunque sea una fumada, mejor pegarte con ello en algo simple xD

1 respuesta
kidandcat

#46 Al final, el networking es un tradeo, lo único que tienes que hacer es decidir quién va a llevarse la peor parte. El que tiene mucho lag, el que no lo tiene, intentamos repartir un poco, etc.

También depende mucho del juego, en el ejemplo que usan en el documento ese que te pasé ponen un shooter. Qué es más injusto, que yo tengo la mirilla en tu cabeza, te disparo, y no te doy, o que tu te escondes detrás de una pared, y después te mueres., pues en el caso de los shooters, lo de disparar y que la bala parezca que desaparece es de lo más doloroso.

1 respuesta
MisKo

#47 Le he pegado esta tarde un vistazo y hasta cierto punto creo que lo he entendido.

  1. Por un lado, entiendo que, para que al usuario su propio "monigote" le vaya fluido, la idea sería moverlo exactamente igual que lo muevo en el servidor y así, cuando llega la posición del server, como mucho corregiría algo mínimo. (predicción)

  2. Lo segundo, la reconciliación, aunque lo he entendido ahora mismo no se muy bien como implementarlo. Por un lado sería guardar todas las peticiones que se envían al server con un timestamp y, cuando llegue una respuesta, volver a replicar las peticiones en cliente partiendo del "timestamp" asociado a esa respuesta.

Esta no creo que la implemente porque no me termina de quedar muy claro xD

  1. Luego, la interpolación, seriá algo parecido a lo primero pero con los movimientos de los demás. Esto tendría que darle una vuelta a ver como hacerlo, ya que del server solo recibo posiciones, pero bueno xD

Ya haré pruebas =)

1 respuesta
kidandcat

#48 Esta libreria tiene una demo bastante chula para ver los efectos de la compensación de lag y demás

https://docs.rs/crystalorb/latest/crystalorb/

MisKo

Pues he cambiado un poco la parte visual para adaptarlo más al "tipo de juego", al final he puesto que es un Air Hockey, he cambiado el background del campo, la pelota por un disco y alguna cosa más.

Ya veré si optimizo el networking y despues ya seguiré con otros juegos, aun no he decidido cual ni si será con godot, aunque es posible que si :D

Para movil, he optado por algo asi, no se si lo acabaré cambiando xD

1

Usuarios habituales