В столкновение с другим объектом можно написать так:
Код
move_contact_solid(direction,abs(vspeed)); //Двигаем объект по директории его движения на модуль вертикальной скорости, пока он не столкнется с твердым объектом или пройдет заданное количество пикселей для движения. Так же можно использовать функцию move_contact_all(с осторожностью), если объект столкновения не твердый.
vspeed = 0; //Столкновение прошло, останавливаем объект.
Так же можно написать свою функцию столкновения, вместо move_contact_solid или move_contact_all.
Вот, например, только что придумал:
move_contact_object(direction,max_step,object):
Код
repeat(argument1)
{
if(place_meeting(x+cos(argument0),y+sin(argument0),argument2)) break;
x-=cos(argument0);
y-=sin(argument0);
}
Правда, из-за неправильного просчета синуса и косинуса в Game Maker, способ наверное не пройдет)