Video del juego: https://youtu.be/i6mz4Nt6BPk?t=58s
Quiero hacer un juego estilo Ski Safari, pero no tengo idea de como hacer esos terrenos y las colisiones, ¿Alguien me podría guiar/ayudar? :)
Desde hace tiempo he querido implementar ese tipo de colisiones vectoriales, pero siempre lo dejo abandonado. El terreno estaría formado por segmentos de recta y arcos, y supongo que sería menos demandante que el sistema de física (Box2D) porque no sería necesario calcular cosas físicas como volúmenes, momentos de rotación, inercia, restitución, etc. Si sabes física y matemáticas podemos trabajar juntos para implementarlo. Tal vez se pueda implementar con sprites, pero creo que el resultado sería poco óptimo.
Cita de: Clamud en Septiembre 28, 2015, 04:20:37 AM
Desde hace tiempo he querido implementar ese tipo de colisiones vectoriales, pero siempre lo dejo abandonado. El terreno estaría formado por segmentos de recta y arcos, y supongo que sería menos demandante que el sistema de física (Box2D) porque no sería necesario calcular cosas físicas como volúmenes, momentos de rotación, inercia, restitución, etc. Si sabes física y matemáticas podemos trabajar juntos para implementarlo. Tal vez se pueda implementar con sprites, pero creo que el resultado sería poco óptimo.
Jajaja, sé GML, pero nunca me he apurado por saber de físicas :-[ , pero quisiera que me orienten en cuanto a lo que tengo que aprender para lograr hacer un juego con la jugabilidad de Ski Safari XD
¿Nadie tiene idea? :-X
He estado pensando que el motor se podría simplificar si los vértices que forman el terreno se colocan a la misma separación sobre el eje x, el concepto sería similar a los mapas de alturas de los juegos 3D. En este caso, en vez de generar celdas, se generan líneas rectas (segmentos).
En principio el personaje sólo podría interactuar con un segmento a la vez, o con un vértice a la vez. La altura del terreno en una posición se calcula interpolando las alturas de los vértices a los lados de la posición. El problema es que el personaje no colisiona con un punto sino que colisiona con su ski o con su cabeza. El personaje se podría representar como un triángulo con dos vértices para el ski y otro vértice, con posición variable, para la posición más baja del cuerpo.
Con lo anterior, el proceso sería así:
Si el punto más bajo del cuerpo del personaje está más abajo que la altura del terreno en esa posición, el personaje cayó de cabeza.
Si un vértice del ski está más abajo que el terreno, entonces el personaje cayó sobre su ski, ahora hay que comparar la el ángulo del ski con el ángulo del terreno, si no están bien alineados, entonces el personaje recibe un golpe.
Si fue un aterrizaje alineado, el personaje debe rotar y desplazarse hasta que los dos vértices del ski (o el punto central del ski) estén sobre el terreno.
En todo momento debe actuar la gravedad, si el personaje está en el aire, simplemente tendrá una aceleración hacia abajo, pero si está sobre el terreno, se tiene que emplear la teoría del plano inclinado; los vectores de velocidad y aceleración se proyectarán sobre el plano.
Si la velocidad es muy grande y en determinado momento más de un vértice del personaje queda bajo el terreno, se considera que el vértice más bajo es el primero que realizó la colisión, si la colisión estuvo alineada, entonces el personaje debe avanzar en dirección del vector normal en el punto de colisión hasta quedar sobre el terreno.
Además se podría utilizar una fuerza de fricción cuando el personaje se desliza sobre la nieve o simplemente definir un límite de velocidad. Se podrían hacer otras cosas que no son realistas, como reducir la gravedad cuando el personaje salta.
¿Los niveles son infinitos? En ese caso, el terreno tendría que estar formado por secciones prediseñadas que se van uniendo de forma aleatoria o usar una función matemática que genere curvas suaves, por ejemplo: y = 5*cos(x/5) + sin(x)/2 - x
(http://i1341.photobucket.com/albums/o747/Clamud/grafica00_zpsshx6sb6p.png)
Cita de: Clamud en Septiembre 29, 2015, 06:37:46 PM
He estado pensando que el motor se podría simplificar si los vértices que forman el terreno se colocan a la misma separación sobre el eje x, el concepto sería similar a los mapas de alturas de los juegos 3D. En este caso, en vez de generar celdas, se generan líneas rectas (segmentos).
En principio el personaje sólo podría interactuar con un segmento a la vez, o con un vértice a la vez. La altura del terreno en una posición se calcula interpolando las alturas de los vértices a los lados de la posición. El problema es que el personaje no colisiona con un punto sino que colisiona con su ski o con su cabeza. El personaje se podría representar como un triángulo con dos vértices para el ski y otro vértice, con posición variable, para la posición más baja del cuerpo.
Con lo anterior, el proceso sería así:
Si el punto más bajo del cuerpo del personaje está más abajo que la altura del terreno en esa posición, el personaje cayó de cabeza.
Si un vértice del ski está más abajo que el terreno, entonces el personaje cayó sobre su ski, ahora hay que comparar la el ángulo del ski con el ángulo del terreno, si no están bien alineados, entonces el personaje recibe un golpe.
Si fue un aterrizaje alineado, el personaje debe rotar y desplazarse hasta que los dos vértices del ski (o el punto central del ski) estén sobre el terreno.
En todo momento debe actuar la gravedad, si el personaje está en el aire, simplemente tendrá una aceleración hacia abajo, pero si está sobre el terreno, se tiene que emplear la teoría del plano inclinado; los vectores de velocidad y aceleración se proyectarán sobre el plano.
Si la velocidad es muy grande y en determinado momento más de un vértice del personaje queda bajo el terreno, se considera que el vértice más bajo es el primero que realizó la colisión, si la colisión estuvo alineada, entonces el personaje debe avanzar en dirección del vector normal en el punto de colisión hasta quedar sobre el terreno.
Además se podría utilizar una fuerza de fricción cuando el personaje se desliza sobre la nieve o simplemente definir un límite de velocidad. Se podrían hacer otras cosas que no son realistas, como reducir la gravedad cuando el personaje salta.
@Klamud
¿Los niveles son infinitos? En ese caso, el terreno tendría que estar formado por secciones prediseñadas que se van uniendo de forma aleatoria o usar una función matemática que genere curvas suaves, por ejemplo: y = 5*cos(x/5) + sin(x)/2 - x
(http://i1341.photobucket.com/albums/o747/Clamud/grafica00_zpsshx6sb6p.png)
Todo eso fue muy complejo (No entendí mucho xD), me hace pensar que no estoy a la altura para hacerlo, pero intentaré dar con una solución... Gracias! ???