2009-07-12 30 views
0

我製作一個精靈,然後添加一個子精靈。MOUSE_OUT事件在父項爲mouseEnabled = false時未觸發,mouseChildren = false

我將一個偵聽器添加到MOUSE_OUT事件的子項中。

如果我的鼠標位於子精靈,當我設置父精靈mouseEnabled = false並且mouseChildren = false時,MOUSE_OUT不會在子級上觸發。

但是,當我移動鼠標時,MOUSE_OUT被觸發。如果點擊,MOUSE_OUT也會被觸發。如果我使用鼠標滾輪,MOUSE_OUT不會被觸發。

那麼,這是怎麼回事?

This is a related question


研究back2dos'代碼後,我發現我在做什麼不同的只是設置mouseChildren = =的mouseEnabled假之前調用stage.focus = NULL。我將舞臺焦點設置爲null以清除文本字段中閃爍的光標...是否有更好的方法來執行此操作?


這裏是back2dos的修改代碼。重現步驟:點擊文本框,獲得閃爍的光標。單擊「按鈕」,但不要在向下和向上之間移動鼠標。注意光標不閃爍(好)。還要注意按鈕上的mouse_out事件沒有被觸發。直到你移動或點擊鼠標。

package { 
    import flash.display.*; 
    import flash.events.*; 
    import flash.geom.ColorTransform; 
    public class Test extends Sprite { 
     private var child:Sprite 
     public function Test() { 
       this.addChild(child = new Sprite()); 
       child.graphics.beginFill(0xFF0000); 
       child.graphics.drawRect(0, 0, 100, 20); 
       child.addEventListener(MouseEvent.CLICK, onClick); 
       child.addEventListener(MouseEvent.MOUSE_OUT, onOut); 
       child.addEventListener(MouseEvent.MOUSE_OVER, onOver); 


     tf = new TextField(); 
     tf.backgroundColor = 0xFF00AA; 
     tf.background = true; 
     tf.type = TextFieldType.INPUT; 
     tf.text = "yo"; 
     tf.y = 100; 
     this.addChild(tf); 
     } 
     private function onOver(e:MouseEvent):void { 
       child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF); 
     } 
     private function onOut(e:MouseEvent):void { 
       child.transform.colorTransform = new ColorTransform(); 
     } 
     private function onClick(e:MouseEvent):void { 
      //try it here... 
      stage.focus = null; 
       this.mouseChildren = this.mouseEnabled = false; 
       //or try it here... 
       //stage.focus = null; 
     } 

    } 
} 

回答

2

必須有一些錯誤代碼......我這裏有一個最低限度的設置:

package { 
    import flash.display.*; 
    import flash.events.*; 
    import flash.geom.ColorTransform; 
    public class Test extends Sprite { 
     private var child:Sprite 
     public function Test() { 
      this.addChild(child = new Sprite()); 
      child.graphics.beginFill(0xFF0000); 
      child.graphics.drawRect(0, 0, 100, 20); 
      child.addEventListener(MouseEvent.CLICK, onClick); 
      child.addEventListener(MouseEvent.MOUSE_OUT, onOut); 
      child.addEventListener(MouseEvent.MOUSE_OVER, onOver); 
     } 
     private function onOver(e:MouseEvent):void { 
      child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF); 
     } 
     private function onOut(e:MouseEvent):void { 
      child.transform.colorTransform = new ColorTransform(); 
     } 
     private function onClick(e:MouseEvent):void { 
      this.mouseChildren = this.mouseEnabled = false; 
     } 
    } 
} 

應該變爲綠色,當你的鼠標經過,並且紅了起來,如果你的鼠標了。 ..點擊,它是禁用與this.mouseChildren = this.mouseEnabled = false ...在我的機器上,這觸發mouseOut(所以矩形再次變成紅色)...這對我來說是有道理的... ...點擊時得到鼠標的東西,是對我來說是一個明確的指標,你必須在某個地方有一個bug ...你能嘗試減少這個問題併發布它嗎?

格爾茨

back2dos

+0

THX你的答案。找出我在代碼中做的不同。添加stage.focus = null;到您的onClick方法的開始。我不確定它爲什麼會產生這種效果(例如,在我移動或單擊(而不是鼠標滾輪)之前不會觸發mouse_out)。 – jedierikb 2009-07-13 05:38:03

0

嘗試MouseEvent.ROLL_OVER代替

+0

不幸的是,一旦ROLL_OVER或ROLL_OUT上的stage.focus = null被觸發或導致MOUSE_OUT。 – jedierikb 2009-07-14 21:46:07

相關問題