lei esto en el glosario
Citarmove_contact_solid(dir,maxdist) Mover la instancia en la dirección dir hasta que haya contacto con un objeto sólido. Si no hay collision en la posición actual, la instancia es colocada justo antes de donde ocurre una colisión. Si ya hay una colisión en la posición actual, la instancia no se mueve. Puedes especificar la distancia máxima a mover la instancia maxdist (emplea un número negativo para indicar distancia arbitraria).
aca hay un script de colision top down perfecta pero para entenderlo necesito saber que es lo que pregunto, creo saber pero quiero asegurarme.
{
var key_left = keyboard_check(vk_left);
var key_right = keyboard_check(vk_right);
var key_down = keyboard_check(vk_down);
var key_up = keyboard_check(vk_up);
////////////////////////////////////////
if(global.gamepause == false){
//Movimientos y animaciones
if(key_left )
{
hspeed = -5;
} else if(key_right)
{
hspeed = 5
} else hspeed = 0;
if(key_up)
{
vspeed = -5;
} else if(key_down)
{
vspeed = 5;
} else vspeed = 0;
if hspeed!=0
if !place_free(x+hspeed,y)
{
if hspeed>0 move_contact_solid(0,hspeed)
if hspeed<0 move_contact_solid(180,-hspeed)
hspeed=0
}
if vspeed!=0
if !place_free(x+hspeed,y+vspeed)
{
if vspeed>0 move_contact_solid(270,vspeed)
if vspeed<0 move_contact_solid(90,-vspeed)
vspeed=0
}
}
}
tambien quiero entender el script :c
Te aseguro que hay una manera mas chula de hacer colision perfecta...
Move contact solid no tiene misterio....
Moveras un objeto hacia otro objeto marcado como "solido" en el editor hasta hacer colision. El segundo argumento es la distancia maxima en pixeles que se va a mover, en el ejemplo que tienes cuando hace contacto hacia la derecha, le restara en sentido contrario su velocidad actual para que retorne al borde de la pared...
Mi consejo seria que se deje de usar "move contact solid" ( y objetos solidos) y se use en su lugar "place meeting" sin necesidad de usar objetos solidos. Y hay codigos disponibles en la red que hacen uso de esta funcion para colision perfecta.
Cita de: jaimitoes en Marzo 18, 2015, 05:31:52 AM
Te aseguro que hay una manera mas chula de hacer colision perfecta...
Move contact solid no tiene misterio....
Moveras un objeto hacia otro objeto marcado como "solido" en el editor hasta hacer colision. El segundo argumento es la distancia maxima en pixeles que se va a mover, en el ejemplo que tienes cuando hace contacto hacia la derecha, le restara en sentido contrario su velocidad actual para que retorne al borde de la pared...
osea que lo que hace es que cuando la velocidad horizontal o vertical sea mayor o menor a una y colisione con algo que este a su lado lo que hara es revertir su velocidad?
Si mas o menos, no revierte la velocidad, sino que le resta la velocidad a la que iba..
Imagina que vas a una velocidad hspeed 6 (hacia la derecha), y colisionas con un solido, en el momento de la colision, tu personaje se habra pasado por 6 pixeles el borde de la colision del solido, lo cual esta funcion te situara el personaje en el borde del objeto solido restandole la velocidad en pixeles que te hayas pasado(le resta tu velocidad actual que en este caso es 6, si llegaras a colisionar con 2 pues le restaria no), de tal modo que nunca transpasaras la pared.