我有一张光盘,我用鼠标旋转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!
答案 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;
}
(未经过测试的代码)