Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: LuciaHedgehog en Marzo 03, 2021, 08:30:01 AM

Título: Evitar que jugador se atore entre dos bloques (SOLUCIONADO)
Publicado por: LuciaHedgehog en Marzo 03, 2021, 08:30:01 AM
hola muy buenas noches, hace mucho que no vengo acá y bueno necesito ayudar a un amigo sobre la falla en este código, en búsquedas no lo encuentro así que creo este post

Que me refiero con el problema?  :GMS:

El objeto jugador posee este código en el evento step para analizar la colisión entre dos objetos (uno en el eje -y , el otro abajo del jugador que es y+ como si lo estuvieran aplastando, pero en vez de matar, este solo sea expulsado de entre esos 2 bloques) lo que se quiere llegar es que cuando el objeto jugador colisiona con ambos objetos, este salga por los lados donde hay espacio libre, pero por alguna razón el código no funciona y el personaje se va para abajo o se queda quieto atravesando los objetos solidos. EL TIPO DE JUEGO: scrolling vertical.

ya intente poner ese código en evento colisión y tampoco sirve. si tienen un código para reemplazar este o corregirlo y que venga con ese efecto de hiper velocidad como si se teletransportara el objeto jugador atorado en el espacio libre seria mucho mejor, gracias.

No es de naves, es como tipo commando o gun smoke del retro



[gml]
///colision de jugador contra estos dos objetos solidos al mismo tiempo
if place_meeting(x,y-1,obj_bloque_up) and place_meeting (x,y+1,obj_bloque_down)
{
///velocidad que expulsa al jugador atorado en el eje x donde hay espacio libre por ejemplo esto:
      x = x-2
}[/gml]

ya les traigo una solución que les podría servir de ayuda

lo que hice fue quitar unas cosas del código como por ejemplo la velocidad de x ya no sea por pixeles si no que se teletransporte directamente, poner un while y puse como parent el obj bloque_up con el obj_bloque_down (ya que no cuenta como objetos diferentes si no como un solo y el código no lee bien si son distintos al parecer) LES DEJO UN VIDEO ADJUNTO DEL RESULTADO


[gml]///hacer que el jugador salga directamente hacia afuera de esos dos bloques hasta ya no hacer colisión con los mismos
while (place_meeting(x,y-1,obj_bloque_down) and (place_meeting(x,y+1,obj_bloque_up)))
{
x = x++ ///sale el personaje en el eje x
}[/gml]