Точные значения на самом деле работают очень хорошо, если предположить, что центр круга находится в (0,0)
.
Когда персонаж выходит за границы, мы возвращаем персонажа к границе, масштабируястарые значения на r/D
, где D=sqrt(x^2+y^2)
:
x*=r/D
y*=r/D
Примечание: это фактически эквивалентно вашему способу использования трига, потому что
r*cos(tan(y/x))=r*x/sqrt(x^2+y^2)
Вы можетезатем установите скорость на ноль или смоделируйте столкновение с границей, установив vx*=k
и vy*=k
, где k
- постоянная демпфирования между -1 и 0.
Какдополнительное прикосновение позволяет замедлить движение персонажа возле границы на
vx*=k*[(r-D)/r]
Этот дополнительный термин необходим, поскольку масштабный коэффициент зависит от положения: ближе к границе мы хотим, чтобы скорость былауменьшено намного больше.Здесь k
находится между 0 и 1, так как мы только замедляемся, а не разворачиваемся.