В данном уроке я объясню простой способ, как двигать объекты/персонажей плавно из одной ячейки сетки в другую.
Движущемуся объекту необходимо выбрать два поведения(behavior). Поведение Bullet (Пуля) и поведение Timer (таймер). Поставьте начальную скорость поведения Bullet (initial Bullet speed) равную нулю в окне properties.
Основная идея состоит в использовании формулы: скорость = расстояние/время.
Если вы хотите передвинуть объект на D пикселей за Т секунд, вам необходимо установить скорость поведения Bullet в D/T. (Я храню время, требуемое на движение на на одну ячейку сетки как переменную экземпляра объекта(instance variable) в данном случае это MoveTime). После того как время таймера закончится, необходимо остановить движение (поставить скорость на 0/ Bullet speed = 0). Так же необходимо не принимать в расчёт нажатие клавиш или других элементов управления, влияющих на движение объекта, пока таймер активен. И наконец, после каждого движения, вам необходимо скорректировать положение объекта по ближайшей ячейке сетки.
Кроме того, если ваш объект двигается возле стен, я рекомендую делать превентивную проверку столкновений. Добавьте условие(condition) на к каждому событию (event) и проверяйте, есть ли стены по пути движения. Этого можно добиться, используя проверку "overlapping at offset". И соответственно, если там стена, не начинать движение. Еще, убедитесь, что ваш объект немного меньше размеров сетки.( для примера 30 на 30 персонаж при 32 на 32 сетке), иначе персонаж может некорректно двигаться вдоль края стены.
Снимок экрана с примером событий ниже, и вы также можете скачать Capx файл в котором реализован данный механизм движения.
Надеюсь, данный урок вам поможет.