2015-10-13 66 views
0

我在Flash项目中拖动游戏场景(鼠标向下 - 开始拖动,鼠标向上 - 停止拖动)。如果我将鼠标悬停在舞台外面,点击任何物体(按钮)都不会工作一次。点击一下其他点击就可以正常工作。怎么了?点击鼠标后在舞台外

更新:跟踪日志显示有事件为mouseOver,mouseDown,mouseUp,mouseOut是调度,但不是CLICK。

更新:在项目中拖动后有第一次点击的消声器。有必要消除某些游戏对象的末端拖动情况(拖动点击)。抱歉。谢谢大家的回答。

回答

1

离开舞台时您可能会失去焦点。尝试使用(Event.MOUSE_LEAVE)'强制'mouse_up。

+0

你是说将鼠标事件分派给鼠标离开处理程序? – Vovanok

+0

是的。恐怕我不得不查看它以提供更多信息,但类似的东西。 – stain88

1

是这样的:

private var _draggedItem:Sprite; 

myDisplayObject.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 

private function mouseDownHandler(event:MouseEvent):void { 
    _draggedItem = event.currentTarget as Sprite; 
    _draggedItem.startDrag(); 
    _draggedItem.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
    stage.addEventListener(Event.MOUSE_LEAVE, stageMouseOutHandler); 
} 

private function stopDragCurrentItem():void { 
    if (_draggedItem) { 
     _draggedItem.stopDrag(); 
     _draggedItem.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
     if (stage) { 
      stage.removeEventListener(Event.MOUSE_LEAVE, stageMouseOutHandler); 
     } 
     _draggedItem = null; 
    } 
} 

private function mouseUpHandler(event:MouseEvent):void { 
    stopDragCurrentItem(); 
} 

private function stageMouseOutHandler(event:Event):void { 
    trace("stage out!") 
    stopDragCurrentItem(); 
} 

更新: 以及有关失去焦点的,你冷做以下的HTML,你嵌入您的Flash:

<object classid="..." codebase="...." width=550 height=400 
     name="myMovie" onmouseover="window.document.myMovie.focus();"> 

虽然我的天堂”对它进行测试。

+0

感谢您的代码。它已经实施。它不会解决问题,在鼠标移出舞台后首次点击。 – Vovanok

+1

你应该将焦点返回到你的html页面上的flash电影。像这样:https://helpx.adobe.com/flash/kb/give-keyboard-focus-embedded-movie.html。所以在JavaScript中你可以听到鼠标悬停事件(当鼠标悬停在你的Flash电影容器上)并手动设置焦点。 – leetwinski