【问题标题】:ActionScript 3.0 Slider doesn't continue when sliding to start滑动开始时 ActionScript 3.0 滑块不继续
【发布时间】:2011-03-14 19:09:59
【问题描述】:

我制作了一个滑块来搜索我的动作脚本视频。 如果你能看到我在做什么,也许你会更好地理解: http://www.stevevo.sin.khk.be/Website%202SDesign/ -> 这是我正在构建的网站正在运行的测试服务器的链接。您会在中心看到巨大的横幅,将其翻转,您会看到一个滑块和一个暂停/开始按钮。 滑块非常适合 1 件小事。当您将滑块拖到最左边时,actionScript 3.0 将再次开始播放电影(我假设),现在向右拖动而不中断,滑块不会像他应该的那样向右移动(一次拖动)。

为什么不能先滑到开头再继续滑?

我的代码:

非常简单。你开始拖动,矩形就是dragRestriction。电影停止。 isDragging = true。

SearchBarSlider.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);

function fl_ClickToDrag(event:MouseEvent):void
{
    var rect:Rectangle = new Rectangle(SearchBar.x + 3, 
                       SearchBar.y, 
                       SearchBar.width - 10, 
                       0);
    SearchBarSlider.startDrag(false, rect);
stop();
    isDraging = true;
}

再次简单。拖动停止。电影再次开始播放。 isdragging = false;

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event:MouseEvent):void
{
    SearchBarSlider.stopDrag();
    play();
    isDraging = false;
}

当鼠标移动时拖动滑块的 x 位置将转换为正确的帧数。在这 3 个部分之间适用其他长度。

stage.addEventListener(MouseEvent.MOUSE_MOVE, fl_Drag);

function fl_Drag(event:MouseEvent):void
{
    if(isDraging == true) {
        if(SearchBarSlider.x - (SearchBar.x + 3) < 20){
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3)) / 20) * 320));
        } else if(SearchBarSlider.x - SearchBar.x + 3 >= 20 && SearchBarSlider.x - SearchBar.x + 3 < 40){
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 20) / 20) * 365) + 365);
        } else {
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 40) / 20) * 465) + 685);
        }
    }
}

此事件在不拖动时在每一帧发生。但不是将滑块的 x 位置转换为帧,而是将帧转换为滑块的 x 位置。

stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);

function fl_frameEvent(e:Event):void
{
    if(isDraging == false) {
        if(currentFrame < 365){
            SearchBarSlider.x = SearchBar.x + 3 + Math.round((currentFrame / 365) * 20);
        } else if(currentFrame >= 365 && currentFrame < 685){
            SearchBarSlider.x = SearchBar.x + 23 + Math.round(((currentFrame - 365) / 320) * 20);
        } else {
            SearchBarSlider.x = SearchBar.x + 43 + Math.round(((currentFrame - 685) / 465) * 20);
        }
    }
}

【问题讨论】:

    标签: actionscript-3 slider flash-cs5 movie


    【解决方案1】:

    第二个功能在拖动的时候真的不会出现吗?您是删除它,还是同时运行它?我认为你的 enter_frame 函数和你的 mouse_move 函数正在互相争斗。在您的拖动功能中添加:

    stage.removeEventListener(Event.ENTER_FRAME, fl_frameEvent);
    

    然后在你的 drop 函数中添加这个:

    stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);
    

    另一种解决方法,我注意到如果您在滑块上放大,如果您向左移动 99.9%,但没有完全对齐,它会按预期工作,所以您可以调整您的可拖动矩形在左侧只留下一个很小的空间。

    SearchBar.x + 4
    

    【讨论】:

    • 嗨,好主意,但这不是问题所在。我试过了,但没有用检查我自己的答案,因为我找到了解决我自己问题的方法:D
    【解决方案2】:

    我实际上解决了我自己的问题,这就是解决方案。

    stage.addEventListener(MouseEvent.MOUSE_MOVE, fl_Drag);
    
    function fl_Drag(event:MouseEvent):void
    {
        if(isDraging == true) {
            if(SearchBarSlider.x - (SearchBar.x + 3) < 1){
            } else if(SearchBarSlider.x - (SearchBar.x + 3) < 20){
                gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3)) / 20) * 320));
            } else if(SearchBarSlider.x - SearchBar.x + 3 >= 20 && SearchBarSlider.x - SearchBar.x + 3 < 40){
                gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 20) / 20) * 365) + 365);
            } else {
                gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 40) / 20) * 465) + 685);
            }
        }
    }
    

    问题在于,当 gotoAndStop 事件在第 1 帧发生时,整个程序重新启动,因为在第 1 帧,操作层重新启动了代码。就这样忙碌的拖拉结束了。使用新代码,搜索栏不会执行 gotoAndStop(1);

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 2014-10-18
      • 2018-04-25
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多