2014-04-15 24 views
0

在我製作的遊戲中,選擇一個形狀,然後在下一個屏幕上選擇一種顏色。形狀選擇器正常工作,並將6個'形狀'影片剪輯之一加載到遊戲的下一個階段。在這個階段,我有按鈕來控制顏色。我試圖通過啓動一個自定義事件來使按鈕改變動畫片段的顏色。然後,每個動畫片段將由該班級內的聽衆檢測到。AS3使用自定義事件來更改不同類別的屬性

到目前爲止,這是我的代碼:

包含顏色變化按鈕時,屏幕:

package { 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class ColorSelector extends MovieClip 
    { 

     public function ColorSelector() 
     { 

      charcoal.addEventListener (MouseEvent.CLICK, onClickCharcoal); 
     } 


     public function onClickCharcoal (mouseEvent:MouseEvent): void 
     { 
      dispatchEvent (new ColorEvent (ColorEvent.CHARCOAL)); 
      trace ("click") 
     }} 

自定義事件類:

package 
{ 
    import flash.events.Event; 

    public class ColorEvent extends Event 
    { 
     public static const CHARCOAL:String = "charcoal"; 

     public function ColorEvent(type: String) 
     { 
      super (type); 
     } 
    }} 

影片剪輯作用於其

package { 

    import flash.display.MovieClip; 


    public class Gobbert extends MovieClip { 


     public function Gobbert() 
     { 
      this.addEventListener (ColorEvent.CHARCOAL, makeCharcoal) 
     } 


     public function makeCharcoal (colorEvent: ColorEvent) :void 
     { 
      this.alpha = .5 
     } 
    } 

在我看來,事件並沒有與聽衆進入課堂。我真的可以用一雙新的眼睛來幫助我弄清楚發生了什麼。該程序不會給我任何錯誤,只是不做其他事情。提前致謝!

回答

0

您在構造函數中缺少氣泡參數。如果省略,則默認爲false。在自定義事件超級調用應該是:

super(type, bubbles, cancelable); 

您將要通過的addEventListener函數調用或自定義事件構造函數中硬編碼傳遞作爲真正的泡沫。

還要確保目標(Gobbert實例)影片剪輯位於事件冒泡路徑上,這意味着ColorSelector必須是Gobbert顯示列表的子代。如果您的顯示列表沒有按照這種方式設置,您可能需要重新考慮您的方法,並讓事件從選擇器傳播到共同父項,然後通過該共同父項在Gobbert上設置顏色。