Buenas, estoy intentando desarrollar un código por el cual el personaje tenga que detectar si hay un bloque encima suya, después tenga que calcular la distancia entre él y el bloque y luego posicionarse justo encima del bloque.
Lo he intentado ya de mil maneras y no consigo el resultado que quiero, ahora mismo lo tengo hecho desde un obj aparte, eliminando y creando al jugador en la posición que quiero, pero no funciona bien.
[spoiler](http://i.imgur.com/VZlH9iZ.png)[/spoiler]
La verdad es que llevo ya una semana y pico intentando solucionarlo y estoy un poco quemado, si pudierais ayudarme sería genial.
Puedes usar un código como este
[gml]
//guardar id del muro que esta arriba
muro = collision_line( x,y, x,y-150, obj_muro, false,true );
//si se presiona W y hay muro arriba
if( keyboard_check_pressed(ord('W')) and muro<>noone )
{
distancia = (sprite_get_height(mask_index) + sprite_get_height(muro.mask_index))/2;
y = muro.y - distancia; //mover personaje
}
[/gml]
Observa que la distancia se calcula sumando la mitad de la las alturas de las máscaras de colisión, eso depende de cómo estén configurados tus sprites. Si todos los muros tienen el mismo tamaño no sería necesario estar recalculando la distancia todo el tiempo.
Para no usar collision_line constantemente, el código se puede modificar así
[gml]
if keyboard_check_pressed(ord('W')) //si se presiona W
{
//guardar id del muro que esta arriba
muro = collision_line( x,y, x,y-150, obj_muro, false,true );
if( muro <> noone )
{
distancia = (sprite_get_height(mask_index) + sprite_get_height(muro.mask_index))/2;
y = muro.y - distancia; //mover personaje
}
}
[/gml]