Не знаю как работает move_snap, ни разу его не использовал, честно говоря. Но могу тебе рассказать как сделать движение по сетке без него.
Создаем временные переменные, отвечающие за координаты и скорости, скажем tx=x, ty=y, tvspeed, thspeed. Устанавливаем размер ячейки сетки как tgrid_size
Дальше эмулируем движение. Скажем, при нажатии кнопки вправо у нас будет thspeed = 1;
Потом в степе сооружаем такую простенькую конструкцию:
Код
tx += thspeed;
ty += tvspeed;
tvspeed = 0.01//гравитация вниз. Тут соответственно нужна проверка коллизий и все такое.
x = round(tx/tgrid_size) * tgrid_size;
y = round(ty/tgrid_size) * tgrid_size;
Ну а дальше, как я и писал выше, регулируем только 2 проекции скорости - горизонтальную thspeed и вертикальную tvspeed, и таким образом управляем объектом. В теории, все должно работать, ну и конечно под твой конкретный случай придется что то подгонять. Удачи