2015-10-13 69 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