2010-08-16 45 views
1

我正在嘗試使下面的代碼可重用。我需要在我的Flash項目中有多個切換按鈕。現在下面的代碼在一個按鈕上工作。如果我繼續並創建更多按鈕,並按照下面的格式,我需要爲每個按鈕創建單獨的函數。如何在AS3中創建可重用的切換按鈕?

我想將可重用的代碼放在單獨的ActionScript文件中,而不是在FLA文件中。我正在嘗試將rolloverToggle,rolloverToggle和toggleClick放在我正在製作的課程中。

// /////////////////////////////////////////////////////////////////////// 

// ------- Need to make this code reusable ------- 

// /////////////////////////////////////////////////////////////////////// 

// code on Frame 1 

toggleButton.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle); 
toggleButton.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle); 
toggleButton.addEventListener(MouseEvent.CLICK, toggleClick); 
toggleButton.buttonState = "off"; 

// function rolloverToggle 
function rolloverToggle(event:MouseEvent) { 
    toggleButton.gotoAndStop(toggleButton.buttonState+" over"); 
} 

// function rolloutToggle 
function rolloutToggle(event:MouseEvent) { 
    toggleButton.gotoAndStop(toggleButton.buttonState); 
} 

// function toggleClick 
function toggleClick(event:MouseEvent) { 
    if (toggleButton.buttonState == "on") { 
      toggleButton.buttonState = "off"; 
      toggleButton.gotoAndStop(1); 
     } else { 
      toggleButton.buttonState = "on";  
     } 
} 

回答

1

這很簡單。創建一個新的通用按鈕類,並在其中添加所有的事件偵聽器。對於要創建的每一個新的按鈕,就在事件偵聽器內擴展您的通用按鈕並填寫所需的代碼:

class GenericToggleButton extends Button 
{ 
    public GenericToggleButton() 
    { 
     this.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle); 
     this.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle); 
     this.addEventListener(MouseEvent.MOUSE_CLICK, toggleClick); 
    } 

    protected function rolloverToggle(event:MouseEvent):void 
    { 
     this.gotoAndStop(this.buttonState+" over"); 
    } 

    protected function rolloutToggle(event:MouseEvent):void 
    { 
     this.gotoAndStop(this.buttonState); 
    } 

    protected function toggleClick(event:MouseEvent):void 
    { 
     if (this.buttonState == "on") { 
      this.buttonState = "off"; 
      this.gotoAndStop(1); 
     } else { 
      this.buttonState = "on"; 
     } 
    } 
} 

現在只是繼承了該類並添加功能。

class NewButton extends GenericToggleButton 
{ 
    public NewButton() 
    { 
     super(); 
    } 

    override protected function toggleClick(event:MouseEvent):void 
    { 
     super.toggleClick(event); 

     // do magic for this button 
    } 

    // ETC 
} 
相關問題