按住鼠标按钮时,为什么SimpleButtons会停止检测状态?

时间:2011-02-19 19:01:11

标签: flash actionscript-3 mouse state simplebutton

我希望能够获得一些关于Flash为何以特定方式行事的见解。这是一个场景:如果你......

1)将SimpleButton添加到舞台并查看SWF
2)然后按住鼠标按钮向下按钮的边界外侧 3)然后在按住鼠标按钮的同时将光标拖到SimpleButton上......

...然后舞台上的SimpleButton不会检测到鼠标悬停并显示其“过度”状态。它只是处于空闲状态。为什么是这样?有没有办法让SimpleButton在按住鼠标按钮时显示其过度状态,然后将光标置于按钮顶部(如上所述)?

这是抽象的,如果你一直很好奇(这不会详细说明这个问题,但可能会帮助你想象一个实际的场景)是什么激发了这个问题,它正是我正在构建的一个应用程序。在此应用程序中,用户可以拖动视频缩略图以重新排列其顺序。当用户开始拖动视频剪辑时,会激活可视指示器,以便用户在用户释放鼠标按钮时知道剪辑将放置在何处(例如,剪辑位于位置1,并且用户将其拖动到剪辑4和5之间一个可视指示符 - 一个SimpleButton - 理想情况下会向用户显示如果用户释放鼠标按钮,它将在剪辑4和5之间被删除。

感谢您的见解!

3 个答案:

答案 0 :(得分:1)

实际上,MOUSE_OVER事件触发得很好(只需添加一个带有简单跟踪的事件监听器 - 就在那里!),无论点击鼠标按钮的位置 - SimpleButton都不会改变可见状态。

如果希望Button的行为不同,则必须创建侦听器功能并手动更改状态。您可以扩展SimpleButton类,并将set downState,upState和overState添加到visible = true;visible = false;,以适合您最佳的行为。

答案 1 :(得分:0)

可以创建一个MOUSE_MOVE事件处理程序并检查光标坐标是否在按钮边界内(如果它们是 - 切换'超过'状态)。
按钮实例中的MOUSE_MOVE侦听器即使在按下

时也可能检测到它上面的鼠标

答案 2 :(得分:0)

拖动图标和视觉指示器之间的简单hitTest可以很好地处理这类事情。

你可以这样:

function myHitTest(e:Event):void {
    if (myButton.hitTestObject(myVisualIndicator)) {
        myVisualIndicator.visible=true;
    } else {
       myVisualIndicator.visible=false;
    }
 }

在鼠标按下时,您可以为该功能设置一个enterframe事件侦听器,并在鼠标释放时清除它。