Actionscript 3 如何使用变换手势通过拖动刻度盘来控制电影剪辑?

Actionscript 3 如何使用变换手势通过拖动刻度盘来控制电影剪辑?,actionscript-3,rotation,gesture,movieclip,Actionscript 3,Rotation,Gesture,Movieclip,我有一个表盘,使用旋转变换器事件顺时针旋转120度,逆时针旋转120度 当旋转这个刻度盘时,我想让它控制一个电影剪辑。顺时针旋转刻度盘时拖动活动唇,然后逆时针旋转刻度盘时反转活动唇。我希望movieclip跟随刻度盘的拖动,在拖动刻度盘时停止和启动 这是我到目前为止看到的,但它似乎只是将电影剪辑转到最后一帧,然后停止 import flash.display.MovieClip; var dial_mc:MovieClip; var knobs_mc:MovieClip;

我有一个表盘,使用旋转变换器事件顺时针旋转120度,逆时针旋转120度

当旋转这个刻度盘时,我想让它控制一个电影剪辑。顺时针旋转刻度盘时拖动活动唇,然后逆时针旋转刻度盘时反转活动唇。我希望movieclip跟随刻度盘的拖动,在拖动刻度盘时停止和启动

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

    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);
}
    }
导入flash.display.MovieClip;
var dial_mc:MovieClip;
var旋钮:MOVICLIP;
var maxRotation:编号=120;
var knobFrame:int=旋钮_mc.currentFrame;
变量偏移量:数值=0;
变量百分比:数值=0;
旋钮_mc.停止();
Multitouch.inputMode=MultitouchInputMode.手势;
拨号-mc.addEventListener(TransformGestureEvent.手势-旋转,旋转数据);
函数rotateDial(e:TransformGestureEvent):无效
{
刻度盘mc旋转+=e旋转;
如果(拨号旋转>最大旋转)
{
刻度盘旋转=最大旋转;
}
如果(刻度盘旋转<0)
{
刻度盘旋转=0;
}
拨号_mc.addEventListener(TransformGestureEvent.手势_旋转、拖动);
偏移=e.旋转;
if(e.phase==GesturePhase.END)
{
knobFrame=knobs_mc.currentFrame;
}
函数拖动(e:TransformGestureEvent):无效
{
百分比=(e.旋转-偏移)/旋钮旋转;
变量帧:int=Math.round(百分比*knobs_mc.totalFrames)+knobFrame;
而(帧>旋钮_mc.总帧)
{
框架-=旋钮+整体框架;
}

而(帧你必须调整你的数学来映射从-120到120到0到240的角度。这样,当你尝试转到帧时,你可以得到完整的范围。我假设帧1到120的刻度盘指向左边


另一种方法是完全舍弃帧,直接使用角度旋转刻度盘。

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


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

dial\u mc只使用手势旋转,没有框架,但我希望它旋转,然后依次播放和停止旋钮。我对AS3非常陌生,所以我只是在尝试和错误,我还不知道所有的知识Illy dial_-mc是一个大刻度盘的正面照片,当转动时,将激活其侧面的刻度盘(旋钮_-mc)的较小图像在旋钮中,mc是由5个镜头组成的系列,当一起播放时,这些镜头的动画就好像它们正在旋转一样。这有意义吗?您正在将旋转添加到当前值-这是您想要的吗?事件是否显示旋转的变化,还是给出当前旋转?在任何情况下,最大旋转应该是240,如果您从0开始当然,刻度盘应该是120。但是,flash也使用弧度,因此从事件处理程序获取以度为单位的旋转,您需要将它们转换为弧度,并将它们添加到旋转中。再次,检查您的数学,使用调试器或跟踪查看您获得的值。不,这不是我想要的,旋转部分就是全部它在工作。我相信我在其他事情上走错了方向。我想把旋转限制在顺时针120度和逆时针120度,这是我用maxRotation实现的。但是我完全坚持我对其余部分所做的。但是你想要总共240度,但你却把它限制在120度-这就是为什么我说你需要重新映射它。dial_mc只使用了gest我是AS3的新手,所以我只是在尝试错误,我还不完全了解!但基本上,dial_-mc是一个大刻度盘的正面拍摄,当转动时,它会激活一侧刻度盘的较小图像(knobs_-mc)在旋钮中,mc是由5个镜头组成的系列,当一起播放时,这些镜头的动画就好像它们正在旋转一样。这有意义吗?您正在将旋转添加到当前值-这是您想要的吗?事件是否显示旋转的变化,还是给出当前旋转?在任何情况下,最大旋转应该是240,如果您从0开始当然,刻度盘应该是120。但是,flash也使用弧度,因此从事件处理程序获取以度为单位的旋转,您需要将它们转换为弧度,并将它们添加到旋转中。再次,检查您的数学,使用调试器或跟踪查看您获得的值。不,这不是我想要的,旋转部分就是全部它在工作。我相信我在其他事情上走错了方向。我想把旋转限制在顺时针120度和逆时针120度,这是我用maxRotation实现的。但是我完全坚持我对其余部分所做的。但是你想要总共240度,但你把它限制在120度-这就是为什么我说你需要重新映射它。