簡體   English   中英

AS3項目-鼠標移動偵聽器在應用程序外部進行響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM