如何使用转换手势拖动刻度盘来控制影片剪辑?

时间:2012-11-28 11:35:47

标签: actionscript-3 rotation gesture movieclip

我有一个表盘,使用旋转的TransformGestureEvent顺时针旋转120度,逆时针旋转120度。

旋转此表盘时,我希望它控制一个影片剪辑。顺时针旋转转盘时拖动动画片段,然后逆时针旋转转盘时反转动画片段。我希望动画片段跟随表盘的拖动,在您拖动表盘时停止和开始。

这是我到目前为止所看到的,但它似乎只是将影片剪辑转到最后一帧然后停止了?

    import flash.display.MovieClip;
    var dial_mc:MovieClip;
    var knobs_mc:MovieClip;
    var maxRotation:Number = 120;

    var knobFrame:int = knobs_mc.currentFrame;
    var offset:Number = 0;
    var percent:Number = 0;


    knobs_mc.stop();

    Multitouch.inputMode = MultitouchInputMode.GESTURE;

    dial_mc.addEventListener(TransformGestureEvent.GESTURE_ROTATE, rotateDial);

    function rotateDial(e:TransformGestureEvent):void
    {
dial_mc.rotation +=  e.rotation;
if (dial_mc.rotation > maxRotation)
{
    dial_mc.rotation = maxRotation;
}
if (dial_mc.rotation < 0)
{
    dial_mc.rotation = 0;
}
dial_mc.addEventListener(TransformGestureEvent.GESTURE_ROTATE, drag);
offset = e.rotation;
if (e.phase == GesturePhase.END)
{
    knobFrame = knobs_mc.currentFrame;

}


function drag(e:TransformGestureEvent):void
{

    percent =  (e.rotation - offset)/knobs_mc.rotation;

    var frame:int = Math.round(percent * knobs_mc.totalFrames) + knobFrame;

    while (frame > knobs_mc.totalFrames)
    {
        frame -=  knobs_mc.totalFrames;
    }

    while (frame <= 0)
    {
        frame +=  knobs_mc.totalFrames;
    }

    knobs_mc.gotoAndStop(frame);
}
    }

1 个答案:

答案 0 :(得分:1)

您必须调整数学以将角度从-120到120映射到0到240.这样,当您尝试转到帧时,您可以获得全范围。我假设第1 - 120帧的表盘位于左侧。

另一种方法是完全抛弃框架,并使用角度直接旋转表盘。