startdrag起点限制?

时间:2013-04-10 15:33:10

标签: actionscript-3 movieclip

我有一个滑块可以控制一个影片剪辑,方法是将它拖动到帧中进行动画制作,从左到右拖动时效果很好但是我希望滑块从中间开始并从中心拖动影片剪辑点能够向右走350,向左走350.

这可能吗?

到目前为止,我的代码是正确的,你可以看到它通过dialSpin_mc向右拖动350。

有没有办法让滑块在某个帧开始并前后移动?

  dialSpin_mc.stop();

    slider_mc.knob_mc.buttonMode = true;

    slider_mc.knob_mc.addEventListener(MouseEvent.MOUSE_DOWN, onDragKnob);
    stage.addEventListener(MouseEvent.MOUSE_UP, onReleaseKnob)

    slider_mc.knob_mc.buttonMode = true;

    function onDragKnob(myEvent:Event):void
    {
        slider_mc.knob_mc.startDrag(false, new Rectangle(0,0,350,0));
        slider_mc.knob_mc.addEventListener(Event.ENTER_FRAME, onScrubMovie);
    }

    function onReleaseKnob(myEvent:Event):void
    {
        slider_mc.knob_mc.stopDrag();
slider_mc.knob_mc.removeEventListener(Event.ENTER_FRAME, onScrubMovie);
    }

    function onScrubMovie(myEvent:Event):void {
        var playHead:int=Math.round((slider_mc.knob_mc.x/350*8)+1);
        dialSpin_mc.gotoAndStop(playHead);    
    }  

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,这是您可以在不使用startDrag()stopDrag()函数的情况下编码滑块功能的方法。

我们的想法是,当您在滑块上按下鼠标按钮时,会创建一个ENTER_FRAME侦听器。滑块X位置的每一帧都将更新以匹配mouseX位置,并确保它只能行进175像素,我们也会检查滑块的新位置。

确保滑块位置有效后,您可以使用相同的代码设置dialSpin_mc帧。

释放鼠标按钮后,将删除输入框架侦听器。

代码顶部声明的sliderOrigin需要更改为适合您项目的任何内容(无论滑块位于滑动区域的中间而不是左侧,滑块xposition是什么)。

var sliderOrigin:int = 150; // The x position the slider is in when in the center of the slide bar
slider_mc.x = sliderOrigin;

slider_mc.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
slider_mc.addEventListener(MouseEvent.MOUSE_UP, mUp);

function mDown(e:MouseEvent):void
{
    addEventListener(Event.ENTER_FRAME, UpdateDrag);
}

function mUp(e:MouseEvent):void
{
    removeEventListener(Event.ENTER_FRAME, UpdateDrag);
}

function UpdateDrag(e:Event):void
{
    slider_mc.x = mouseX;

    // Check if the slider is 'out of bounds' and change its position if it is
    if(slider_mc.x < sliderOrigin - 175)
        slider_mc.x = sliderOrigin - 175;
    else if(slider_mc.x > sliderOrigin + 175)
        slider_mc.x = sliderOrigin + 175

    var playHead:int = Math.round((slider_mc.x/350*8)+1);
    dialSpin_mc.gotoAndStop(playHead);
}

根据滑块的起始位置,playHead的范围将改变(因此如果滑块从x pos 200开始,范围将介于2和10之间,在x pos 400处,范围介于6和14之间 - 简单修复通过将偏移量从+1更改为任何必要的。)