2011-05-13 17 views
0

好了,我的問題,以及特定的時間在那裏發生,我有一個DisplayObject在底部,這是可以點擊的,有一個懸停狀態,一個文本字段下方。最大的問題是,我需要所有MouseEvents去他們兩個,不只是文本字段,而不是僅僅的DisplayObject。原因在於我的文本需要將工具提示附加到位於下方DisplayObject頂部的鼠標。的ActionScript鼠標事件的多個項目

package 
{ 
    import flash.display.InteractiveObject; 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.geom.ColorTransform; 
    import flash.text.TextField; 

    [SWF(width="400", height="400", frameRate="24", backgroundColor="#EEEEEE")] 
    public class tester2 extends Sprite 
    { 
     protected var cTransform:ColorTransform; 

     protected var rect:Sprite; 
     protected const RECT_ON_COLOUR:uint = 0xFF0000; 
     protected const RECT_OFF_COLOUR:uint = 0x0000FF; 

     protected var text:TextField; 
     protected const TEXT_ON_COLOUR:uint = 0xFFFFFF; 
     protected const TEXT_OFF_COLOUR:uint = 0x000000; 

     public function tester2() 
     { 
      rect = new Sprite(); 
      rect.graphics.lineStyle(1); 
      rect.graphics.beginFill(RECT_OFF_COLOUR, 0.8); 
      rect.graphics.drawRect(10, 10, 100, 100); 
      rect.graphics.endFill(); 
      add(rect); 

      text = new TextField(); 
      text.text = "TextField"; 
      text.selectable = false; 
      text.height = 30; 
      text.x = text.y = 13; 
      text.textColor = TEXT_OFF_COLOUR; 
      add(text); 

      cTransform = new ColorTransform(); 
     } 

     protected function add(item:InteractiveObject):void { 
      addChild(item); 
      item.addEventListener(MouseEvent.MOUSE_MOVE, onMouseEvent); 
      item.addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent); 
     } 

     protected function onMouseEvent(e:MouseEvent):void { 
      setColour(e.target, (e.type == MouseEvent.MOUSE_MOVE)); 
     } 

     protected function setColour(item:Object, over:Boolean):void { 
      if(item == rect) { 
       cTransform.color = (over? RECT_ON_COLOUR: RECT_OFF_COLOUR); 
       rect.transform.colorTransform = cTransform; 
      } 
      else { 
       text.textColor = (over? TEXT_ON_COLOUR: TEXT_OFF_COLOUR); 
      } 
     } 
    } 
} 

這裏你可以看到上面的例子中的影響, http://seadersforums.appspot.com/static/4stack/multiple_mouse_events/index.html

現在,我想迫使發生的是,當你的鼠標在任何文本區域,文本拿起事件,以及任何其他鼠標事件,以及下面的DisplayObject。換一種說法,我想要吃我的蛋糕,也要吃。我希望文本按照它在這個例子中的方式行事,但也要讓它在我的文本上使mouseEnabled等於false的情況下工作。

我問過類似的問題,此前有關的位圖,儘管在不同的情況下,最終以parent.getObjectsUnderPoint ...的解決方案,這是不太理想去了。如果這是我唯一的選擇...我會不情願地再次走那條路,但我很想找到一個更好的解決方案,並真的認爲必須有,只要我能克隆的情況下向下行到下一個孩子在那個時候。

感謝您提供任何幫助。

回答

0

我試着按以下方式改變setColour功能:

保護功能setColour(項目:對象,過:布爾):無效{

  cTransform.color = (over? RECT_ON_COLOUR: RECT_OFF_COLOUR); 
      rect.transform.colorTransform = cTransform; 

     if(item == text) 
      text.textColor = (over? TEXT_ON_COLOUR: TEXT_OFF_COLOUR); 

    } 

而且只有當鼠標改變文本框的顏色已經結束了,不確定這是否是您的解決方案。

你能指定更多的細節究竟我們想要達到:)

感謝

+0

呀,我不認爲我解釋什麼,我想正確的。鼠標在文本上發生了什麼*發生,或者該按鈕與該情況的處理方式無關。目前,如果你將鼠標停留在底部的對象(在這種情況下,一個長方形的雪碧,但它可以是任何東西,爲SimpleButton,影片剪輯,任何東西),它做什麼,它應該做的,同樣爲所有其他鼠標事件。但關鍵問題是,當您將鼠標懸停在文本上時,該事件和所有其他鼠標事件只能到達TextField。我需要的是文本和底層對象來獲取該事件。 – seaders 2011-05-13 13:30:38