Я пытаюсь облегчить (постепенно переместить) вращение объекта в произвольную позицию. Угол поворота определяется классом Virtual Thumbstick, который возвращает координаты X / Y между -1 и 1. Если на джойстике нет движения, я поворачиваюсь назад к точке 0, за исключением того, что я компенсирую угол поворота изображение спрайта.
Проблема, с которой я столкнулся, состоит в том, что этот код будет позволять только приблизительно 1,5 поворота (где-то между -3 * PI и 3 * PI) вместо непрерывного вращения. Используя Math.Atan2 с координатами X / Y на ползунках, возвращаемый угол ограничен между -PI и PI, но допускает непрерывное вращение. Кроме того, если я поверну объект в одном направлении и отпущу джойстик, он будет вращаться назад в направлении, в котором он находился. Я хочу, чтобы он вращался обратно на вершину по кратчайшему маршруту.
if (VirtualThumbsticks.LeftThumbstick.Length() > .2f)
{
double rotateTo = Math.Atan2(VirtualThumbsticks.LeftThumbstick.Y, VirtualThumbsticks.LeftThumbstick.X);
if (rotateTo > Rotation + Math.PI) rotateTo -= (Math.PI * 2);
if (rotateTo < Rotation - Math.PI) rotateTo += (Math.PI * 2);
Rotation += (rotateTo - Rotation) * 0.2;
}
else
{
Rotation += (-1.57079 - Rotation) *0.2;
}
Если есть разработчики игр на Flash / ActionScript, которые знают, о чем я говорю, пожалуйста, укажите, как я могу применить это к C #.
Спасибо всем заранее!
EDIT:
Этот кусок кода работает безупречно в AS3:
function enterFrameHandler(e:Event):void
{
var curMouseX = Math.round(-(arrow.x - stage.mouseX));//(stage.stageWidth/2)-(stage.mouseX/2);
var curMouseY = Math.round(-(arrow.y - stage.mouseY));//(stage.stageHeight/2)-(stage.mouseY/2);
var angleTo:Number = Math.atan2(curMouseX, -curMouseY) * TO_DEGREES;
if (angleTo > arrow.rotation+180) angleTo -= 360;
if (angleTo < arrow.rotation-180) angleTo += 360;
tf_angle.text = angleTo.toString();
tf_mouseX.text = curMouseX.toString();
tf_mouseY.text = curMouseY.toString();
arrow.rotation += (angleTo - arrow.rotation) * 0.2;
}
Я начинаю задаваться вопросом, есть ли проблема с моими типами или типизацией, которая вызывает проблему. Если у кого-то есть идеи, ваш вклад очень ценится.