Zeriod, предложу решение очень пространное, идею. Тебе нужно будет её реализовать.
1. Во-первых, надо сделать объект, за которым следит вид (назовём его объектом камеры, камерой) (его координаты, к примеру, могут зависеть от координат игрока).
2. Когда нужен будет сдвиг экрана, сделай так, чтобы объект сам автоматически двигался на определённое расстояние с пределённой скоростью. Т.е., в этот момент его координаты не зависят от координат игрока.
3. Проблему с обездвиживанием игрока можно решить по разному. Самый распространнёный - отнять управление, когда координаты камеры не зависят от координат игрока (а они не зависят как раз тогда, когда камера двигается на определённое расстояние, которое тебе нужно). Но я не люблю этот способ. Как вариант, предлагаю деактивировать функцией
instance_deactivate_object(obj_player)
obj_player - твой игрок
Но перед этим запомнить координаты игрока (их можно взять из объекта камеры, она ведь от игрока зависит), нарисовать в дополнительном объекте, а может даже и в самой камере (событие Draw) спрайт игрока в тех координатах, где находился игрок перед деактивацией. И всё. Получится, что игрок не может двигаться (хотя на самом деле его просто не будет существовать на этот момент в комнате и следовательно, ты его не сможешь двигать). А потом, когда надо, вновь активировать игрока.
Проблема здесь заключается в том, что игра выдаст ошибку, если какие-то параметры (например, координаты врага) зависят от объекта игрока. Но она легко решается, если везде код, где есть зависимость чего-либо от объекта игрока взять в такие скобки:
if instance_exists(obj_player)
{
....
КОД ТОГО, ЧТО ЗАВИСИТ ОТ ОБЪЕКТА ИГРОКА
.....
}
Надеюсь, понятно выразился.