Но если прыгнуть на вертикальный блок сверху застревает намертво.
Потому что x/yprevious точка находится как раз над блоком и, когда гравитация тянет из этой точки обьект опять на блок все повторяется сначала. Получается замкнутый цикл. Проверять столкновение нужно только в определенных местах а не по всему блоку, так же не нужно останавливать движение, нужно запретить его в определенном направлении (в твоем случае вниз). GameMaker Easy Menu