使用MOUSE_MOVE旋转图像时出现问题

时间:2011-03-24 17:47:20

标签: actionscript-3

嘿帮派。难倒的东西。

我有一张光盘,我用鼠标旋转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 个答案:

答案 0 :(得分:1)

您正在将_knob旋转设置为_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;
}

(未经过测试的代码)