Как мы можем заставить нашего персонажа плавно перемещаться по плиткам? Он двигает плитку за плиткой, но это выглядит непрофессионально. Кроме того, когда вы удерживаете клавиши со стрелками, он перемещается по экрану. Как мы можем предотвратить это?
8
Ответы:
Плавное движение может быть достигнуто несколькими способами. И это действительно зависит от того, какое движение вы хотите разрешить.
Псевдокод:
Где
MoveTowards
просто берет текущую позицию и добавляет часть расстояния между ней и целевой позицией.Удерживание клавиш со стрелками для перемещения символов также может быть реализовано несколькими различными способами. Вероятно, что вы делаете, это что-то вроде:
Это действительно заставит персонажа перемещаться по экрану. Так как вы будете обновлять позицию много раз в секунду. Немного лучший способ реализовать это - добавить задержку. Что-то вроде
Это добавит таймер задержки и обновит позицию тайла только после того, как
movementDelay
значение будет достигнуто.источник
Я могу выделить две проблемы. Первая связана с плавным движением, а вторая связана с убеганием персонажа с экрана.
Чтобы создать плавное движение, вы можете использовать технику, называемую линейной интерполяцией или (LERP) для сглаживания движения. В основном, как это работает, между вашей начальной точкой и конечной точкой вы вычисляете набор все меньших расстояний, чтобы имитировать плавное движение и замедление, когда конечная точка почти достигнута.
Простейшим примером этой функции будет:
Когда персонаж приближается к пункту 2, он постепенно замедляется. Обратите внимание, что они никогда не будут касаться точки 2, но будут бесконечно близко. Вам необходимо исправить это, и если игрок находится на бесконечно малом расстоянии от точки 2, мы можем считать, что игрок находится в точке 2.
Вторая проблема, о которой вы упомянули, связана с тем, что ваш персонаж летает за кадром. Это результат чтения ввода при каждом обновлении игрового цикла в сочетании с мгновенным перемещением между тайлами.
В идеале, чтобы решить это, в вашем коде вам нужно решить,
источник