hola chicos  :D bueno se que este lo he publicado una vez, cometi el error de no guardar el codigo y ahora que ando buscando lo que preguntaba, esta me la habian borrado :,v ,pero bueno... en mi proyecto tuve un problema, mi player necesita que lo empujen a los lados cuando un bloque este arriba y otro abajo y cuando no tenga espacio, este salga rapidamente a los lados y que el codigo funcione a la inversa  :'( ... la vista de mi juego es shooter vertical, estilo gun.smoke  :love: le agradesco al quien me responda
@MAFYGAMES-

Pues tendriasque comprobar ambos posiciones a la vez y si es asi moverlo hacia un costado
[gml]
if ( place_meeting(x,y-1,pared) and place_meeting(x,y+1,pared) ) {x+=1}
[/gml]

Cita de: 3dgeminis en Enero 31, 2018, 07:08:54 PM
Pues tendriasque comprobar ambos posiciones a la vez y si es asi moverlo hacia un costado
[gml]
if ( place_meeting(x,y-1,pared) and place_meeting(x,y+1,pared) ) {x+=1}
[/gml]

gracias por responder iwi, he utilizado el codigo, pero me falla al ir a direccion de los lados y aparte como mi personaje avanza un pixel arriba no se mueve verticalmente y se traba en el bloque de abajo, porque en mi codigo que añadi solo me salio para un lado, pero tambien del otro, pero se mueve super lento, me podrias ayudarme como   :'(
@MAFYGAMES-

Que codigo tenes para mover el personaje y las colisiones ?

Cita de: 3dgeminis en Febrero 02, 2018, 03:25:35 PM
Que codigo tenes para mover el personaje y las colisiones ?

este va en step uwu: (colision)
/// Procesar movimiento
pm = place_meeting(x+vh,y+vv,obj_pared);
cl = collision_line(x,y,x+vh,y+vv,obj_pared,false,false);

if (pm or cl) {
    // Comprobando colisión horizontal
    for(var i=0;i<abs(vh);i++){
        if (place_meeting(x+sign(vh),y,obj_pared)) then break;
        x += sign(vh);
    }
    // Comprobando colisión vertical
    for(var i=0;i<abs(vv);i++){
        if (place_meeting(x,y+sign(vv),obj_pared)) then break;
        y += sign(vv);
    }
    vh = 0;
    vv = -3;
}
----------
este va en el mismo step: (movimiento)
vv = -1;
vh = 0;
v = 4;
if  keyboard_check(vk_left) vh = -v;
if  keyboard_check(vk_up) vv = -v;
if  keyboard_check(vk_right) vh = v;
if  keyboard_check(vk_down) vv = v;
@MAFYGAMES-

Intente probar tu codigo pero el objeto no para de moverse hacia arriba y las colisiones solo ocurren a los costados y hacia abajo, cuando se muebe hacia arriba contra una pared este la atraviesa sin poder moverse a los costados.
Me parece que el problema talves este en el sistema de colisiones que tienes y que cambiandolo no tendrias que mover a los costados si se atora entre las paredes.

Deberías poner un video o gif donde se muestre el movimiento que queres recrear. No estoy seguro si el movimiento lo vi en Gunsmoke; cada vez que el personaje queda aplastado por un obstáculo se teletransporta a la orilla más cercana.

El código de 3dgeminis podría funcionar, pero el if se debe cambiar por un while.

Lo mejor sería usar un código que no revise las colisiones pixel por pixel. Se podría modificar este script
https://yal.cc/gamemaker-collision-line-point/
para que funcione a la inversa. En lugar de encontrar el punto de colisión más cercano, encontrar el punto libre más cercano.

Si el nivel estuviera construido en un array 2d se podría revisar cada celda a los lados hasta encontrar un celda vacía.