0

我希望能够深入了解 Flash 为何以特定方式运行。这是一个场景:如果你...

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

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

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

感谢您的洞察力!

4

3 回答 3

1

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

如果您希望您的 Button 表现不同,则必须创建侦听器函数并手动更改状态。您可以扩展 SimpleButton 类并将 set downState、upState 和 overState 添加到visible = true;visible = false;适合您所需行为的组合中。

于 2011-02-19T22:25:03.190 回答
0

可以创建一个MOUSE_MOVE事件处理程序并检查光标坐标是否在按钮边界内(如果它们在 - 切换“结束”状态)。即使在按下按钮实例时,按钮实例中
的侦听器也可能会检测到鼠标悬停在它上面MOUSE_MOVE

于 2011-02-19T19:16:56.070 回答
0

在您拖动的图标和视觉指示器之间进行一个简单的 hitTest 就可以很好地处理这种事情。

你可以有这样的东西:

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

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

于 2011-02-19T21:43:41.650 回答