AGENTX001, выложи спрайт и маску, попробую сделать пример.
Я делал так: все дома делал из двух объектов: маска и сам дом. У дома маски нет - сквозь него можно проходить. У "маски" маска есть.
В редакторе ставим только дома. В событии создания каждого дома пишем создания объекта-маски в тех же координатах (для каждого дома своя маска). Столкновения проверяй с объектом-маской.
У игрока точно так же - два объекта - маска и сам игрок (у иобъекта "игрок", как и у "здания" маски столкновений быть не должно - отключи в редакторе спрайтов). Управляешь только одним объектом (я управлял маской), а второй просто привязываешь к нему.
В событии создания здания еще пропиши изменение глубины: глубина должна равняться -y
Код в событии "шаг" у объекта "игрок" (obj_player_mask - объект-маска игрока, obj_building_base - родительский объект для всех домов (можно не только дома, но и любые другие объекты, за которые игрок может "заходить")
Code
with (obj_player_mask)
{
if (place_meeting(x,y,obj_building_base)) //Если игрок за зданием/забором/деревом ит т.д.
{
other.depth=1-((instance_place(x,y,obj_building_base)).y) //Устанавливаем ему глубину глубже чем здание/забор/дерево и т.д.
}
else
{
other.depth=-1000 //если игрок не за зданием ставим игрока на передний план
}
}
Маску для игрока лучше делать в виде овала. Перемещать советую маску, image_angle у маски игрока не меняй.
Вроде бы ничего не забыл
Добавлено (18.01.2011, 12:28)
---------------------------------------------
NeZnayu выложил хороший и простой пример. Он на много удобнее чем то что предлагаю я. Возможно он тебе подойдет.
минус тут в том, что не для всех игр (не для всех объектов) он подойдет. Он подходит только в том случае, если левый и правый углы спрайта находятся на одном уровне (у них одинаковый у и он совпадает с у самого спрайта), если углы не на одном уровне - отображаться будет не правильно (по этому я и сделал таким способом - через 2 объекта, другой не нашел и придумать не смог).