Привет, я, например, в своих платформерах использую при передвижении переменные hspeed и vspeed (встроенные в Game Maker). Во-первых, нужно сделать объект стены твердым (Solid). Во-вторых, к игроку в столкновение со стеной поставить проверку:
Код
//obj_wall - объект стены, hspeed - перемещение по горизонтали, vspeed - перемещение по вертикали.
move_contact_solid(direction,abs(hspeed)+abs(vspeed));
if place_meeting(x+hspeed,y,obj_wall)
hspeed = 0;
if place_meeting(x,y+vspeed,obj_wall)
vspeed = 0;
В-третьих, поставить игроку и блоку правильную маску (это уже на ваше усмотрение, что по-вашему считается "правильным").
Спасибо за внимание