Проблема с поворотом изображения с помощью MOUSE_MOVE - PullRequest
1 голос
/ 24 марта 2011

Эй, банда. Остановился на чем-то.

У меня есть диск, который я вращаю с помощью мыши с помощью event.MOUSE_MOVE, как вращающееся колесо на некотором аудиооборудовании. Все почти работает, как и ожидалось, но проблема, с которой я сталкиваюсь, заключается в том, что диск всегда переходит к точке, в которой пользователь нажимает на диск. Мне нужна точка на диске, на которой пользователь нажимает, чтобы оставаться под мышкой, пока пользователь крутит диск, но я не могу придумать правильную математику, чтобы это произошло. Вот код, который я использую:

var xd = (_knob.x  - _stageRef.stage.mouseX);
var yd = (_knob.y  - _stageRef.stage.mouseY);
var radAngle = Math.atan2(yd, xd);
_knob.rotation = int(radAngle * 360/(Math.PI * 2) - 90);

_knob - векторный круг, обернутый в видеоклипе, с центром в центре точки видеоклипа. _stageRef представляет основную сцену.

Любая помощь будет потрясающей. Я прочесал интернет и ничего не могу придумать.

Thx!

1 Ответ

1 голос
/ 24 марта 2011

Вы устанавливаете поворот ручки _ на угол между _knob и курсором мыши. Таким образом, если вращение было 0, а угол 45, вращение становится 45, поэтому он прыгает. Вам нужно измерить изменения в этом угле, не устанавливая его мгновенно:

var _mouseAngle:Number;

function getMouseAngle():Number
{
    var xd = (_knob.x  - _stageRef.stage.mouseX);
    var yd = (_knob.y  - _stageRef.stage.mouseY);
    return Math.atan2(yd, xd);
}

function onMouseDown(event:MouseEvent):void
{
    _mouseAngle = getMouseAngle();
}

function onMouseMove(event:MouseEvent):void
{
    var newAngle:Number = getMouseAngle();
    _knob.rotation += (newAngle - _mouseAngle) * 180.0 / Math.PI; //EDIT: forgot to convert into degrees
    _mouseAngle = newAngle;
}

(код не проверен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...