2013-04-18 33 views
0

Actionscript newbie。 Actionscript 3.0 按照教程開始http://republicofcode.com/tutorials/flash/basicwebsite/ 只要代碼保留在Flash文件中,一切都可以正常工作。當我將它移動到外部文件時,我遇到了問題。如何使用按鈕控制動畫片段?

我有下面的代碼對我的行動層關鍵幀:

stop(); 

function goHome (e:MouseEvent):void{ 
gotoAndStop("Home"); 
} 
home_btn.addEventListener(MouseEvent.CLICK, goHome); 

function goAbout (e:MouseEvent):void{ 
gotoAndStop("About"); 
} 
about_btn.addEventListener(MouseEvent.CLICK, goAbout); 

function goLinks (e:MouseEvent):void{ 
gotoAndStop("Links"); 
} 
links_btn.addEventListener(MouseEvent.CLICK, goLinks); 

function goContact (e:MouseEvent):void{ 
gotoAndStop("Contact"); 
} 
contact_btn.addEventListener(MouseEvent.CLICK, goContact); 

一切工作正常,但我想代碼轉移到外部文件AS3和我遇到了問題。

我已經添加了文檔類「site1」,這是我的外部文件的名稱。我從我的Flash文件關鍵幀中刪除了代碼並將其移至外部文件。

下面是代碼,因爲它出現在我的site1.as

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

public class button extends MovieClip{ 

    public function button() { 
     function goHome (e:MouseEvent):void{ 
gotoAndStop("Home"); 
} 
home_btn.addEventListener(MouseEvent.CLICK, goHome); 

function goAbout (e:MouseEvent):void{ 
gotoAndStop("About"); 
} 
about_btn.addEventListener(MouseEvent.CLICK, goAbout); 

function goLinks (e:MouseEvent):void{ 
gotoAndStop("Links"); 
} 
links_btn.addEventListener(MouseEvent.CLICK, goLinks); 

function goContact (e:MouseEvent):void{ 
gotoAndStop("Contact"); 
} 
contact_btn.addEventListener(MouseEvent.CLICK, goContact); 
    } 
} 
} 

問題是,當我發表我的Flash文件,它只是不斷循環,而不是暫停的按鈕點擊。

任何幫助都將不勝感激。

+1

除了注意的給出答案,嘗試添加一個'停止();在時間軸的第1幀'作爲動作(或其他框架你需要一個停止)。這將阻止電影播放所有幀和循環,但可以通過按鈕單擊去框架標籤 –

回答

1

命名您的班級和文件具有相同的名稱。我建議下面的代碼。

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

    public class YourClassName extends MovieClip 
    { 
     public function YourClassName() { 
      home_btn.addEventListener(MouseEvent.CLICK, goHome); 
      about_btn.addEventListener(MouseEvent.CLICK, goAbout); 
      links_btn.addEventListener(MouseEvent.CLICK, goLinks); 
      contact_btn.addEventListener(MouseEvent.CLICK, goContact);   
     } 

     private function goHome(e:MouseEvent):void { 
      gotoAndStop("Home"); 
     }  

     private function goAbout(e:MouseEvent):void { 
      gotoAndStop("About"); 
     } 

     private function goLinks(e:MouseEvent):void { 
      gotoAndStop("Links"); 
     } 

     private function goContact(e:MouseEvent):void { 
      gotoAndStop("Contact"); 
     } 

    } 
} 

AS3比AS2更明確。我建議你使用private/public訪問器。

編輯。

'按鈕'不是一個非常好的類名,但它會起作用。

1)命名您的文件,類和構造: '按鈕':

public class button extends MovieClip 

public function button() 

2)請確保您的聯繫是好!含義:如果要使用此類控制整個電影,請將文檔「Class」名稱更改爲button,如果您只想控制庫中的MovieClip,請在舞臺上拖動它,選中「導出操作腳本」,並將button的「Class」值更改。

認爲用這種方法,你不需要任何實例名稱。在這種情況下,班級聯繫就足夠了。

編號:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Class.html

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b8ea63-7fee.html

+0

這給了我以下錯誤「TypeError:Error#1009:Can not access a property or method of null object reference。\t at button()」 – user1488639

+0

請參閱我的編輯。我認爲你的問題更多的是關於「我如何與AS3進行文檔鏈接或類連接?」。如果我確實理解了這個問題。 –

1

一個類由屬性和函數組成:通常是一個構造函數,它在類實例化後運行(在文檔類中,只要應用程序運行),然後調用其他函數方法。

你所做的是你已經把所有的功能放在的構造函數中:不好。這是一個功能,你只是不這樣做(雖然技術上,你可以做匿名函數,但這是一個不同的故事)。

另外,您的事件偵聽器應該添加到構造函數中。添加事件偵聽器正在調用一個函數,並且(就我所知),您不能從其他函數之外的類中調用函數。

基本上,你應該把你的功能進行構造,像這樣的:

package{ 

    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 

    public class button extends MovieClip{ 

     public function button() { 
      home_btn.addEventListener(MouseEvent.CLICK, goHome); 
      about_btn.addEventListener(MouseEvent.CLICK, goAbout); 
      links_btn.addEventListener(MouseEvent.CLICK, goLinks); 
      contact_btn.addEventListener(MouseEvent.CLICK, goContact); 
     } 

     function goHome (e:MouseEvent):void{ 
      gotoAndStop("Home"); 
     } 

     function goAbout (e:MouseEvent):void{ 
      gotoAndStop("About"); 
     } 

     function goLinks (e:MouseEvent):void{ 
      gotoAndStop("Links"); 
     } 

     function goContact (e:MouseEvent):void{ 
      gotoAndStop("Contact"); 
     } 
    } 
} 

另一件事是,文件名應該是相同的類名。也就是說,您的文檔類應稱爲button.as而不是site1.as。我不完全確定它是否在Flash IDE中是100%必需的(自從我使用它以來已經有一段時間了),因爲它沒有給出錯誤,但即使這不是一個好習慣。

研究類的工作方式以及專門編寫類是個好主意。 Here's a kirupa tutorial on classeshere's an ActiveTuts+ tutorial on document classes

+0

我剛剛糾正了我的代碼,因爲我忘記將事件偵聽器添加到構造函數中。然而,埃裏克的回答有一個關於用'private' /'public'訪問器來指定函數範圍的觀點:雖然它們本質上不是,但爲了清楚起見,指定它們通常是好的做法,如果沒有別的。 – puggsoy

相關問題