Я могу легко менять направление, но скорость меняется в зависимости от
расстояние, которое я нажал от текущей позиции. Я пытался
выполнить некоторую нормализацию и т. д., но безуспешно.
Я склонен сказать, что вы, возможно, ошиблись в части нормализации, потому что это должно быть ответом на вашу проблему. Ваш код действительно изменяет скорость, так как разница между текущей позицией и позицией касания просто уменьшается в 10 раз. Это означает, что расстояние касания относительно текущей позиции влияет на скорость: чем дальше касание , чем быстрее будет двигаться мяч.
Чтобы этого не происходило, нормализуйте компоненты x и y, чтобы получить единичный вектор . Его характеристикой является то, что его величина / длина (скорость в основном) точно равна 1. Вы можете подумать об этом, указав, какой процент от общей скорости должен идти на вертикальные и горизонтальные компоненты.
* * 1010
Обратите внимание, что я изменил амплитуду на double
, так как здесь использование значения int приведет к тому, что компонент будет усечен до '0' или '1' (поскольку величина вектора всегда больше, чем или равно его отдельным компонентам). Следовательно, вы можете захотеть применить коэффициент масштабирования, чтобы получить работающие значения int, хотя вы потеряете точность в процессе из-за усечения. В зависимости от коэффициента масштабирования, это может или не может привести к заметной скорости, отличающейся после прикосновения к экрану.