Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: n0k en Septiembre 18, 2018, 12:26:56 PM

Título: Choque con tiles y gravedad hacia ellos
Publicado por: n0k en Septiembre 18, 2018, 12:26:56 PM
Saludos comunidad, quiero pedir perdón de antemano por el texto largo, pero creo que esto es interesante, en este caso uso GM2, pero el GM vale también para ello supongo. Es un juego plataformas a lo que se hace referencia aquí, pero valdría para cualquier tipo de juego.

Se puede obviar todo el texto hasta el punto 2 que es el importante ciertamente.

Desde hace tiempo mi cabeza quiere cambiar la forma de hacer las colisiones en los juegos, porque es diferente chocar contra un tile, que contra un objeto, ya que podemos chocar con un objeto y colocar el tile encima para verlo de una manera determinada y esconder el objeto donde en realidad se posa o choca el personaje. Creo que muchos usamos este sistema y no es mal sistema. Lo que pienso es lo siguiente, ante todo perdón por el texto largo:

1- Siempre es más sencillo y creo que es básico usar el place_meeting, o el place_free, para cualquier juego. Cada desarrollador tiene sus manías, pero esto es un "must know" siempre, y si quieres chocar con las cosas, hacer acciones y demás se usa siempre.

Pero aquí viene el punto 2 y lo que me está matando la vida(no literalmente).

2- Desde hace una semana he estado mirando la opción de chocar contra unos tiles con la forma del suelo, rampas, digamos un tileset básico de choque, el cual será el que no se vea, de forma que no se creen 100 objetos para caminar por una habitación y chocarse y usar tiles para el choque y tiles que se verán. Después obviamente, los objetos de choque siguen siendo los mismos, no se quitan solo se crean menos objetos con los que chocar.

Aquí empieza el desarrollo de la idea:

tenemos unos tiles con el nombre "collision" por ejemplo, con las formas de las colisiones, ya sabéis por ejemplo cubos.

Obtenemos el id así: tilecolission = layer_get_id("collision")

El problema lo tengo aquí: no sabría bien como hacer para que se choque, tenga gravedad y no afecta al salto y demás, ya que si intentas saltar pero estás tocando el tile no saltarías, porque no estás en un place_meeting y no puedes tomar como referencia un place_free, sería una locura... estoy un poco ofuscado, porque esto me quita el sueño sin coña  :-[.

Con el place_meeting es sencillo que salte y demás porque se encuentra con un objeto y toma toda su mask para ello, y no tienes que tener en cuenta un tile para decirle salta, pero ahora estás en el suelo, pero ahora no... pero con un tile, mh... es otra movida...

¿Alguien ha conseguido que esto funcione o se lo ha planteado si quiera?

A ver si entre todos podemos sacar un código limpio para poder usarlo en nuestros proyectos.

Un abrazo gente.
Título: Re:Choque con tiles y gravedad hacia ellos
Publicado por: n0k en Septiembre 19, 2018, 07:01:13 PM
Después de mucho investigar y ver que no llegaba a algo muy claro, he visto en youtube que hay un vídeo que es clave, y es fácil de entender. Así que allí está lo necesario, no hace falta que reinventemos la rueda. XD
Título: Re:Choque con tiles y gravedad hacia ellos
Publicado por: dixon2010 en Septiembre 19, 2018, 11:22:47 PM
He logrado ciertas colisiones con tiles mediante condiciones controladas por un objeto, He adjuntado una muestra del programa.

Por favor indica cual es el video
Título: Re:Choque con tiles y gravedad hacia ellos
Publicado por: somnus en Septiembre 20, 2018, 12:51:32 AM
Cita de: n0k en Septiembre 19, 2018, 07:01:13 PM
Después de mucho investigar y ver que no llegaba a algo muy claro, he visto en youtube que hay un vídeo que es clave, y es fácil de entender. Así que allí está lo necesario, no hace falta que reinventemos la rueda. XD

en la seccion de scripts hay un codigo que se puede aplicar a plataformas y tiles, tal vez te puede servir, ahi mismo creo agregue un link a un codigo del market place donde ya se hace eso, no usando tiles si no por medio de objetos
Título: Re:Choque con tiles y gravedad hacia ellos
Publicado por: n0k en Septiembre 20, 2018, 09:57:24 AM
Buenas a todos,

Este es el vídeo del que hablo. Este código es muy limpio, tengo que decir un par de cosas de las que me he percatado, pongo el vídeo y explico, o más bien desarrollo:

https://www.youtube.com/watch?v=KRIlaSttSOw&t=692s&index=7&list=PLh0JS6fDPrI0CxPlU9XXnBcLNk_Nf-7Vn (https://www.youtube.com/watch?v=KRIlaSttSOw&t=692s&index=7&list=PLh0JS6fDPrI0CxPlU9XXnBcLNk_Nf-7Vn)

A diferencia del clásico place_meeting, el tileset no tiene una facilidad para digamos hacer "gravedad", o " daño al chocar". Por lo que he llegado a la conclusión de que para encerrar a un jugador en una pantalla es mejor los tiles, de hecho, para juegos con movimiento tipo zelda que se mueve por "x" e "y" por igual es lo ideal, ya que tiene que estar encerrado con movimiento libre en esas coordenadas del espacio. Pero a la hora de poder realizar cualquier interacción con el terreno u objetos, es mejor place_meeting, aunque pudiéramos colocar un tile de por ejemplo una moneda girando y realizar una acción cuando se acerque el personaje como aumentar un contador y que desaparezca la moneda, es mejor que sea un objeto que haga lo mismo y se destruya de forma que el código será más fácil y reutilizable, y al final aunque gaste un pelín más de memoria, renta la velocidad de creación de código y de reutilización del mismo. Es mi opinión, y no se si será acertada, pero creo que es una buena opción para el flujo de trabajo y ahorro de tiempo.

Si de todas formas alguien no entiende como funciona después de ver el vídeo, puedo explicar un poco de qué va la vaina.

PD: sommus, gracias por tu indicación, en efecto para choque con objetos es idóneo, para tiles tiene otra mecánica. Pero gracias por tu ayuda e indicación compañero.

Un saludo a todos.