[英]AS3 Project - Mouse Move Listener Reacting Outside of Application
我遇到了一種異常行為,似乎無法深入探究。 運行此命令時,如果我在swf區域中移動,則通常會在鼠標移動時進行跟蹤。 可以預料的。
但是,當我單擊屏幕上的任何位置時,它都在跟蹤移動事件。 如果單擊並拖動,它的蹤跡就像我在瀏覽器的swf區域中移動一樣。
這是代碼。 我已經簡化為准系統。 只需將其放入Flex中名為“ Engine”的一個空AS3項目中即可(顯然沒有引號)。
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')]
public class Engine extends Sprite
{
public function Engine()
{
// Add the mouse handlers
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
public function mouseMoveHandler(evt:MouseEvent):void
{
trace("move");
}
}
}
作為一種解決方法,我添加了一個MOUSE_MOVE一個MOUSE_OVER並在MOUSE_OUT上將其刪除。 但是這種行為似乎仍然很不尋常,我很想了解為什么會這樣。
誰能告訴我如何將事件限制在應用程序的實際階段?
如前所述,您無法阻止觸發這些事件。 它們被觸發,直到您釋放鼠標為止。
您可以做的是將MouseEvent的坐標與舞台的邊界進行比較,而忽略外部的坐標。
public function mouseMoveHandler(evt:MouseEvent):void
{
if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth &&
evt.stageY >= 0 && evt.stageY <= stage.stageHeight)
{
trace("move");
}
}
好的,這是一個已知的錯誤,僅適用於Mac。
這里有一個解決方法:
http://www.visible-form.com/blog/transformmanager-fix-for-mac-firefox/
如果單擊Flash電影內部並將鼠標拖到Flash電影外部,則MOUSE_MOVE事件將繼續觸發,直到釋放鼠標為止。 僅當您在播放器外部釋放鼠標時,MOUSE_LEAVE才會觸發。 這就是Flash Player的工作方式。
也許我錯了,但我不認為您可以更改此行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.