Actionscript 3 startdrag起点限制? 我有一个滑块通过拖动它来控制电影剪辑动画,当从左到右拖动时效果很好,但是我想让滑块从中间开始,从中心点拖动电影剪辑,它可以向右走350步,向左走350步。

Actionscript 3 startdrag起点限制? 我有一个滑块通过拖动它来控制电影剪辑动画,当从左到右拖动时效果很好,但是我想让滑块从中间开始,从中心点拖动电影剪辑,它可以向右走350步,向左走350步。,actionscript-3,movieclip,Actionscript 3,Movieclip,这可能吗 这是迄今为止我的代码,你可以看到它通过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,

这可能吗

这是迄今为止我的代码,你可以看到它通过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);    
    }  

如注释中所述,这是如何在不使用
startDrag()
stopDrag()函数的情况下编写滑块功能的

其思想是,当您在滑块上按下鼠标按钮时,将创建一个
ENTER\u FRAME
侦听器。每一帧滑块X位置都将更新,以匹配
mouseX
位置,并且为了确保它只能以175像素的速度移动,我们还将检查滑块的新位置

确保滑块位置有效后,可以使用相同的代码设置
dialSpin\u mc

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

代码顶部声明的
sliderOrigin
需要更改为适合您的项目的位置(当您将滑块X移动到幻灯片区域的中间而不是最左侧时,滑块X的位置是什么)

var sliderOrigin:int=150;//滑块位于滑动条中心时的x位置
slider_mc.x=sliderOrigin;
slider_mc.addEventListener(MouseEvent.MOUSE_DOWN,mDown);
slider_mc.addEventListener(MouseEvent.MOUSE_UP,mUp);
函数mDown(e:MouseEvent):void
{
addEventListener(Event.ENTER_FRAME,UpdateDrag);
}
函数mUp(e:MouseEvent):void
{
removeEventListener(Event.ENTER_FRAME,UpdateDrag);
}
函数UpdateDrag(e:事件):void
{
滑块_mc.x=鼠标;
//检查滑块是否“超出范围”,如果超出范围,则更改其位置
如果(滑块_mc.x滑块原点+175)
滑块_mc.x=滑块原点+175
变量playHead:int=Math.round((滑块x/350*8)+1);
dialSpin_mc.gotoAndStop(播放头);
}

根据滑块的起始位置,播放头的范围将发生变化(因此,如果滑块在x位置200处开始,范围将在2到10之间,在x位置400处,范围在6到14之间-通过将偏移量从+1更改为任何必要的值来进行简单修复)。

dialSpin_mc总共有700帧吗?没有,它有9-*8)+1);啊,当然,对不起,下午太慢了!您的编码方式在我看来很好,将
dialSpin\u mc
的当前帧基于滑块的规范化
x
位置,目前的问题到底是什么?(注意:每次开始拖动时,您当前正在创建一个新的
ENTER_FRAME
侦听器,但您没有删除任何侦听器,请在
MOUSE_UP
事件函数中删除事件侦听器)。我希望滑块从中间位置开始,这样它可以在第4-1帧中向左滑动,在第5-9帧中向右滑动?如果这有意义的话?那么滑块基本上是从第5帧开始定位的?滑块现在位于中央并左右滑动,但它不控制movieclip?在
拨号旋转\u mc.gotoAndStop(..)
行(
trace(playHead)
)下添加一个轨迹,并观察输出,以查看您试图将拨号帧设置为什么。它可能试图将其设置为第10-18帧(它没有第10-18帧,所以它不会做任何事情)。它会重复数字1吗?当我把它改为+2时,它移动了一帧..我有点困惑?萝拉,我没有正确复制你的电影剪辑结构,已经更新了我的答案,将
playHead:int=
更改为
Math.round((slider\u mc.x/350*8)+1)
。问题是你拖动
旋钮\u mc
并使用它相对于
slider\u mc
的x位置,在上面的示例中,我们正在移动
滑块_mc
,必须使用它的x位置,而不是
旋钮_mc
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);
}