Не уверен, правильно ли я понял проблему ... Вы имеете в виду, что если положение мыши немного меньше + PI, а targetAngle
немного больше, чем -PI, то линия поворачивается от мыши?Дело в том, что даже если оба значения находятся в одном диапазоне (-PI, PI), они все равно могут быть довольно далеко друг от друга.Вы должны настроить angle
, чтобы соответствовать PI-окрестности текущего значения targetAngle
.
// get the angle from the center to the mouse position
angle = atan2( mouseY - height/2, mouseX - width/2 );
// check and adjust angle to be closer to targetAngle
if ( angle < targetAngle - PI ) angle = angle + TWO_PI;
if ( angle > targetAngle + PI ) angle = angle - TWO_PI;
Это будет работать, если targetAngle
находится в диапазоне (-TWO_PI, TWO_PI).Кажется, это будет работать для вас.Если targetAngle
может иметь какое-либо значение очень далеко от рабочего диапазона, то вы можете использовать что-то вроде этого:
// get the angle from the center to the mouse position
angle = atan2( mouseY - height/2, mouseX - width/2 );
// calculate the shortest rotation direction
float dir = (angle - targetAngle) / TWO_PI;
dir = dir - Math.round(dir);
dir = dir * TWO_PI;
// ease rotation
targetAngle += dir * easing;