Во-первых, давайте посмотрим на математику алгоритма.
Когда кнопка нажата, скорость и положение изменяются в зависимости от ускорения a , при t (число раз выполнения функции), начальные значения v 0 и х 0
v = v 0 + a * t
x = x 0 + Σ (i = 1 до t) i * a
или
х = х 0 + (т 2 + т) * а / 2
И когда кнопка отпущена (ускорение равно 0), скорость v уменьшается геометрически
v = v 0 * 0,91 t
после 10 вызовов у нас ~ 0,39 В, после 100 вызовов ~ 10 -5 v. Это означает, что визуально позиция x замедляется и останавливается, v слишком мало, чтобы через некоторое время что-то изменить.
Математика соответствует тому, что видно в играх.
Вопрос в том, почему этот алгоритм не работает с левой стороны.
Хотя должно работать одинаково, влево и вправо.
Разница в том, левая сторона,
- скорость v более вероятно, будет отрицательным после нажатия LEFT
- позиция x может в какой-то момент стать отрицательной (и должна быть проверена)
Поскольку предоставленный код (вероятно) не охватывает часть, подлежащую изменению, некоторые рекомендации:
- Вы можете увеличить скорость до 0, если abs ( v ) меньше, скажем, 10 -5 или других небольших значений, из-за которых позиция не изменяется визуально ( меньше пикселя).
- Убедитесь, что значения x проверены на пределе, особенно для отрицательных значений.
- Отладка: отображение / журнал v и x значений, особенно после того, как LEFT выпущены. Таким образом, когда вся программа работает, вам будет легче определить, когда возникла проблема.
Если это не решит вашу проблему, вы можете отредактировать свой вопрос и добавить более подходящий код.