Coleguis programadores

Videojuegos, música, series...
Bollito
Avatar de Usuario
Mensajes: 9131
Registrado: 18 Feb 2012, 23:12

Coleguis programadores

Notapor O.P. Wilkituski » 23 Ago 2016, 21:53

Pues nada, resulta que he empezado a mas-o-menos-programar. No es que vaya a ponerme a programar mi "futuro proyecto abandonado", ni nada (tiene demasiadas funcionalidades que aún quedan muy, muy lejos de mis habilidades programadorísticas), pero sí que me gustaría empezar a construir cierto "esquema" sobre el que, en el futuro, podría trabajar.
El problema es que creo que voy a necesitar ayuda para crear un sistema que maneje la "física" del juego. ¿Alguno de los amigables programadores del foro tiene experiencia con ello?

No es que sea un absoluto desastre, el personaje se mueve, salta, suba, baja y cae sin problemas de forma bastante realista, e incluso creo que no me sería muy difícil añadir otras mecánicas "clásicas", como saltar contra la pared o agarrarse a los salientes... El problema viene cuando intento añadir el agua. La física acuática de mi juego no es para nada realista, y no sé muy bien qué hacer para mejorarla. Así que supongo que mi pregunta es:
Motherfucking water, how does it work!?

Portador de la banspardenya
Avatar de Usuario
Mensajes: 5775
Registrado: 18 Feb 2012, 13:45

Re: Coleguis programadores

Notapor Edearth » 23 Ago 2016, 23:33

La verdad es que esa es una pregunta muy, muy, muuuuy general. Para el agua, si puedes calcular la altura a la que está y tienes la diferencia con la altura del personaje, puedes saber cómo de sumergido está este. Así puedes aplicarle diferentes patrones de movimiento dependiendo de esta diferencia (por ejemplo, camina normal entre [0,20]% sumergido, más lento y con una animación distinta entre (20,70]% sumergido y animación y movimiento de nadar si es superior a 70%). Pero claro, esto es sólo para la transición caminar-nadar.

Hay mil escenarios más en los que puede intervenir el agua (caída desde un sitio alto, te arrastra en unos rápidos, etc.), así que antes de nada te voy a pedir que nos expliques más. ¿Cómo es tu juego? ¿Un plataformero 2D? ¿O es aquél que hacías con RPG Maker? Define lo que tienes ahora y las escenas en que el agua se ve fuera de lugar o que no actua correctamente. Quizá entonces sepa cuál es el problema xD

Avatar de Usuario
Mensajes: 5803
Registrado: 18 Feb 2012, 16:27
Ubicación: The Chasm of the Abyss

Re: Coleguis programadores

Notapor Volk63 » 24 Ago 2016, 00:24

Mírate Box2D para el tema de físicas. En stack overflow todas las respuestas que te vas a encontrar son del palo de Ede: No hay solución rápida y fácil.
I am sad and appalled that guessing at random hasn't yielded any results.

Bollito
Avatar de Usuario
Mensajes: 9131
Registrado: 18 Feb 2012, 23:12

Re: Coleguis programadores

Notapor O.P. Wilkituski » 24 Ago 2016, 01:37

Edearth escribió:La verdad es que esa es una pregunta muy, muy, muuuuy general. Para el agua, si puedes calcular la altura a la que está y tienes la diferencia con la altura del personaje, puedes saber cómo de sumergido está este. Así puedes aplicarle diferentes patrones de movimiento dependiendo de esta diferencia (por ejemplo, camina normal entre [0,20]% sumergido, más lento y con una animación distinta entre (20,70]% sumergido y animación y movimiento de nadar si es superior a 70%). Pero claro, esto es sólo para la transición caminar-nadar.

Hay mil escenarios más en los que puede intervenir el agua (caída desde un sitio alto, te arrastra en unos rápidos, etc.), así que antes de nada te voy a pedir que nos expliques más. ¿Cómo es tu juego? ¿Un plataformero 2D? ¿O es aquél que hacías con RPG Maker? Define lo que tienes ahora y las escenas en que el agua se ve fuera de lugar o que no actua correctamente. Quizá entonces sepa cuál es el problema xD


No es un juego, más bien un experimento... 2D con desplazamiento lateral, no estilo RPG Maker (RPG Maker tiene demasiado "peso muerto" que sobreescribir como para ponerse a programar un sistema de físicas medianamente decente). Chequear si el personaje está en el agua, cambiar el gráfico y la velocidad, bien, el problema llega cuando hay que simular las leyes de la física en sí bajo el agua, es decir, la flotabilidad que proporciona el agua. Sin entrar en corrientes de agua ni nada de eso, que aún no es material de mi nivel.

Ahora, tal y como funciona mi juego, hay un chequeo para ver si el personaje tiene un sólido debajo de sí. Si lo tiene, es que está en el suelo: su velocidad vertical es 0, puede saltar y puede moverse a derecha e izquierda.
Si no hay nada, está en el aire: no puede saltar (porque ya está saltando) y le aplico una aceleración vertical hacia abajo hasta que esté en el suelo.
Luego, si está en un líquido, empiezan los problemas. Los cambios evidentes, tales como reducirle la velocidad a la que se mueve hacia los lados y hacia arriba parecen lógicos, pero no sé muy bien qué hacer con la gravedad. Traté simplemente de rebajarla, pero el problema aparecía cuando me lanzaba desde cierta altura: la aceleración disminuía, pero la velocidad de la caída la conservaba, así que caía hasta el fondo exageradamente rápido para estar hundiéndome en el agua. Probé a utilizar una desaceleración, pero no era mucho mejor en términos de realismo y me provocaba ciertos problemas al llegar a la superficie (cierto efecto rebote y un impulso extra a la hora de saltar fuera del agua que no debería estar ahí).
Así que, básicamente, ando en busca de un sistema que me permita que los personajes que caigan al agua pierdan velocidad si han caído con mucha fuerza, pero sin aplicarles una fuerza hacia arriba que puedan aprovechar para saltar de más, ni que se hundan lentamente y puedan simplemente ponerse a caminar por el fondo.
Tal vez necesite un físico, o hacer alguna chapuza/trampa al estilo de cambiarles la inercia al tocar la superficie del agua...

Portador de la banspardenya
Avatar de Usuario
Mensajes: 5775
Registrado: 18 Feb 2012, 13:45

Re: Coleguis programadores

Notapor Edearth » 24 Ago 2016, 02:24

La manera chapucera de hacer eso es comprobar a qué velocidad se mueve el personaje e ir reduciéndola a cada comprobación. Imagina el siguiente caso: caes al agua a 20 ud/s (unidades de distancia/segundo). Si la velocidad vertical es superior a 10 ud/s cuando entras al agua, le restas un porcentaje. Simplemente asegurate de que la velocidad de esta comprobación no sea una velocidad que permita el movimiento normal del personaje en el agua (es decir, que el personaje no pueda llegar a 10 ud/s nadando.

Según me he encontrado con la experiencia y he leído de la experiencia de otros, las simulaciones físicas "teóricas" están bien, pero normalmente se sienten extrañas. Lo mejor es hacer algo que "parezca" que funciona correctamente.

Gato negro
Avatar de Usuario
Mensajes: 4433
Registrado: 18 Feb 2012, 16:41
Ubicación: En tu imaginación.

Re: Coleguis programadores

Notapor 2nozo » 24 Dic 2016, 01:23

Edearth escribió:Según me he encontrado con la experiencia y he leído de la experiencia de otros, las simulaciones físicas "teóricas" están bien, pero normalmente se sienten extrañas. Lo mejor es hacer algo que "parezca" que funciona correctamente.


Después de leer esto, me iba a abstener de decir "¿por qué no crear una función con ciertas constantes para decidir la velocidad del sujeto?", pues en el chapuzón podrías crear una función tal que bajo ciertas condiciones diera 0 y luego entrara en el agua con otra función... creo que no me explique bien pero eso no es lo importante, mi duda es "¿por qué es mejor hacer algo que parezca que funciona correctamente que una simulación física?
Spoiler:
Imagen

Volver a Cultura/Geek

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

Contador de visitas Contador de visitas