Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: JoelBarrionuevoBBG en Abril 04, 2021, 04:22:10 AM

Título: Plataformas atravesables (One Way Platforms)
Publicado por: JoelBarrionuevoBBG en Abril 04, 2021, 04:22:10 AM
Un saludos a todos, tengo una duda. ¿Como puedo hacer una plataforma que lo pueda pasar desde abajo y luego se convierte sólido estando encima de esa plataforma, y mientras estoy encima de esa plataforma y pulso abajo o "S" y hacer que la plataforma ya no sea sólida? Pensé que sería fácil, pero luego varios intentos no logro hacerlo bien. Uso Game Maker 8.1  :GM8:. Les agradecería mucho su ayuda.
Título: Re: Plataformas atravesables (One Way Platforms)
Publicado por: eams1986 en Abril 04, 2021, 04:52:27 AM
Las plataformas atravesables, también conocidas en inglés como one-way platforms, son un recurso muy explotado en los juegos de plataformas en 2D. Este tipo de suelos no frenan el jugador si los atraviesa de abajo hacia arriba, pero sin embargo son sólidos cuando la dirección es la contraria (el jugador se posa sobre ellas).

oneway

Para empezar, hay que aclarar que para conseguir un buen resultado, hay que prescindir del sistema de sólidos que trae Game Maker Studio (el tick que se puede marcar para cada objeto, indicando si es Solid o no), ya que es incompatible con la solución que se propone en este pequeño tutorial. Para gestionar los movimientos del jugador y sus colisiones con el suelo y paredes, se recomienda confeccionarlo en el evento Step del jugador (aquí tenéis un buen tutorial para ello). Teniendo cumplido ese prerrequisito, podemos ponernos manos a la obra:

Una vez que hemos creado un sprite para nuestra plataforma atravesable, creamos el objeto. Para el evento Create vamos a insertar la siguiente línea de código:
sprite_index = -1;
Esto lo que hace es que no exista un sprite predefinido para nuestro objeto. Este punto es interesante, ya que nosotros forzaremos en el paso 3 el sprite a dibujar.

Para el evento Step tenemos preparadas las siguientes líneas:
if (round(Player.y + Player.sprite_height/2) > y){
    mask_index = -1;
}else{
    mask_index = s_floor;
}
En lenguaje humano: si el jugador tiene al menos la mitad de su cuerpo por debajo de la plataforma, esta no tendrá máscara, por lo que no habrá colisión y el salto del jugador no cesará aunque su cabeza choque contra la plataforma. En caso de que esté por encima, la máscara será la propia del sprite, lo que mágicamente hará que ahora sí que se detecte la colisión, y el jugador quede sobre la plataforma.

Por último, en el evento Draw:
draw_sprite(s_floor,-1,x,y);
Lo que hará que siempre se dibuje la plataforma, y no desaparezca aunque la máscara sea nula

Y de esta forma tan sencilla, tenemos una plataforma atravesable desde abajo.


Credito : JDSoft
Título: Re: Plataformas atravesables (One Way Platforms)
Publicado por: JoelBarrionuevoBBG en Abril 05, 2021, 09:32:05 AM
Cita de: eams1986 en Abril 04, 2021, 04:52:27 AM
Las plataformas atravesables, también conocidas en inglés como one-way platforms, son un recurso muy explotado en los juegos de plataformas en 2D. Este tipo de suelos no frenan el jugador si los atraviesa de abajo hacia arriba, pero sin embargo son sólidos cuando la dirección es la contraria (el jugador se posa sobre ellas).

oneway

Para empezar, hay que aclarar que para conseguir un buen resultado, hay que prescindir del sistema de sólidos que trae Game Maker Studio (el tick que se puede marcar para cada objeto, indicando si es Solid o no), ya que es incompatible con la solución que se propone en este pequeño tutorial. Para gestionar los movimientos del jugador y sus colisiones con el suelo y paredes, se recomienda confeccionarlo en el evento Step del jugador (aquí tenéis un buen tutorial para ello). Teniendo cumplido ese prerrequisito, podemos ponernos manos a la obra:

Una vez que hemos creado un sprite para nuestra plataforma atravesable, creamos el objeto. Para el evento Create vamos a insertar la siguiente línea de código:
sprite_index = -1;
Esto lo que hace es que no exista un sprite predefinido para nuestro objeto. Este punto es interesante, ya que nosotros forzaremos en el paso 3 el sprite a dibujar.

Para el evento Step tenemos preparadas las siguientes líneas:
if (round(Player.y + Player.sprite_height/2) > y){
    mask_index = -1;
}else{
    mask_index = s_floor;
}
En lenguaje humano: si el jugador tiene al menos la mitad de su cuerpo por debajo de la plataforma, esta no tendrá máscara, por lo que no habrá colisión y el salto del jugador no cesará aunque su cabeza choque contra la plataforma. En caso de que esté por encima, la máscara será la propia del sprite, lo que mágicamente hará que ahora sí que se detecte la colisión, y el jugador quede sobre la plataforma.

Por último, en el evento Draw:
draw_sprite(s_floor,-1,x,y);
Lo que hará que siempre se dibuje la plataforma, y no desaparezca aunque la máscara sea nula

Y de esta forma tan sencilla, tenemos una plataforma atravesable desde abajo.


Credito : JDSoft

Gracias, pero ¿como hago para que con una tecla se va para abajo de la plataforma?