2010-01-13 56 views
2

MOUSE_OUT顯然,離開Sprite時X和Y鼠標移動的處理方式不同。垂直和水平移動的不同MOUSE_OUT行爲?

我該如何解決這個問題或者解決它?這在哪裏記錄?

MOUSE_OUT時發生x==0,但不是y==0(你需要去y==-1):

private var _sp:Sprite; 

public function test():void 
{ 
    stage.align = StageAlign.TOP_LEFT; 
    stage.scaleMode = StageScaleMode.NO_SCALE; 

    _sp = new Sprite(); 
    _sp.graphics.beginFill(0xFF0000, 1); 
    _sp.graphics.drawRect(0, 0, 15, 15); 
    _sp.graphics.endFill(); 
    _sp.x = 10; 
    _sp.y = 10; 
    _sp.alpha = 1; 

    addChild(_sp); 

    _sp.addEventListener(MouseEvent.MOUSE_MOVE, msMvCb, false, 0, true); 
    _sp.addEventListener(MouseEvent.MOUSE_OUT, msOutCb, false, 0, true); 
} 

private function msMvCb(evt:MouseEvent):void 
{ 
    traceMousePos("mv", evt); 
    _sp.alpha = 1; 
} 

private function msOutCb(evt:MouseEvent):void 
{ 
    traceMousePos("out", evt); 
    _sp.alpha = .5; 
} 

private function traceMousePos(note:String, evt:MouseEvent):void 
{ 
    trace(note + " -- " + evt.localX + ", " + evt.localY + ", " + evt.stageX + ", " + evt.stageY); 
} 

這裏是直線向上移動,與MOUSE_OUT在-1痕跡......

mv -- 7, 3, 17, 13 
mv -- 7, 2, 17, 12 
mv -- 7, 1, 17, 11 
mv -- 7, 0, 17, 10 
out -- 7, -1, 17, 9 

這裏是一條直線向左移動的軌跡,MOUSE_OUT在0 ...

mv -- 3, 7, 13, 17 
mv -- 2, 7, 12, 17 
mv -- 1, 7, 11, 17 
out -- 0, 7, 10, 17 

編輯

與MOUSE_ENTER會發生同樣的錯誤行爲。

回答

0

我不是專家,但看起來像一些錯誤,我也試着用ROLL_OVER也做同樣的事情,也作爲一個明顯的事情,如果你把框放在0,0有一個小的1px邊框舞臺的頂部,當它在上面時也顯示爲-1。

+0

是的,這種錯誤的行爲也發生在ROLL_OVER上,但我無法重現您描述的視覺效果。 – jedierikb 2010-03-02 02:10:25

1

「修復」這種行爲的一種方法是讓Sprite的子類偵聽它的所有MOUSE_MOVE,MOUSE_OUT和MOUSE_ENTER事件。在檢查每個事件時,決定是否讓它像平常一樣傳播,完全停止它,或派發一種符合你想要的行爲的新類型的事件應該是相對直接的。例如,可以偵聽MOUSE_MOVE,並且如果y == 0,則分派新的MOUSE_OUT事件(並且如果y == -1則阻止任何後續的冗餘事件)。

+0

這是一個好主意,但是...當mouseY == 0時,鼠標仍然在視覺上在精靈中。捕獲並調用我自己的mouseOut然後可能會在技術上解決此問題,但視覺行爲將關閉。 – jedierikb 2010-03-02 02:50:45