在什么情况下,Flash应用程序可以接收两个MouseEvent.MOUSE_DOWN,而没有中间的MouseEvent.MOUSE_UP?
在我的ActionScript 3应用程序中,我希望跟踪拖动子画面的用户。我的计划是监听MouseEvent.MOUSE_DOWN,启动一个无限重复的计时器来记录鼠标的位置,然后在MouseEvent.MOUSE_UP上停止计时器。这是个好计划吗?
发布于 2011-07-15 01:41:21
您将获得两个向下事件,而不是向上事件。
更好的拖放解决方案可能是侦听MOUSE_MOVE事件,并在事件处理程序中检查buttonDown属性。如果按钮在移动时按下,则为true,否则为false。
编辑:对于stage,即使你在flash窗口外释放按钮,up事件也会被激发。所以对于stage,这是可以工作的,但仍然不是计时器,而是使用MOUSE_MOVE和buttonDown在我看来更好。您可以使用以下代码检查自己:
public class StageEventTest extends Sprite
{
public function StageEventTest()
{
stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
}
private function onDown(evt:MouseEvent):void {
trace("down");
}
private function onUp(evt:MouseEvent):void {
trace("up");
}
private function onMove(evt:MouseEvent):void {
trace("move", evt.buttonDown);
}
}发布于 2011-07-15 01:44:27
如果鼠标在舞台之外,它将错过鼠标释放事件,并在鼠标悬停在舞台上时继续鼠标跟踪,因为鼠标释放事件从未被调用。这个可能的问题可以通过使用Event.MOUSE_LEAVE -转发鼠标离开事件到鼠标释放事件处理程序来缓解,这样,如果用户将鼠标从舞台上移开,鼠标释放事件就会被调用。
发布于 2011-07-15 01:18:19
是的,但除非你正在听舞台,否则我认为如果鼠标离开了Flash电影,你可能会错过mouseup事件。然而,没有什么能胜过实验。
https://stackoverflow.com/questions/6697304
复制相似问题