2011-02-17 52 views
0

CS5和AS3的新手,所以如果我犯了一個根本性的錯誤,請不要猶豫糾正我。Flash CS5 + AS3時間線導航

我試圖建立一個相當冗長和複雜的形式。所以這需要通過不同的部分進行導航。我是Flash和AS3的新手,所以我從一些原型開始,並有兩個按鈕在時間軸中向前和向後導航。我現在的問題是,現在我試圖從「代碼片段」(正確的術語?)區域和我的主ActionScript文件中取出它。按鈕出現,但按下它們不會執行MouseEvent。

所以有兩個問題。 1. Am I doing this right? 2. Why doesn't MouseEvent work when the code is in the .as file?

Form.fla - 第1幀代碼段

var form:Form = new Form(); 
addChild(form); 

Form.as

package 
{ 
    import flash.display.MovieClip; 
    import fl.controls.Button; 
    import flash.events.MouseEvent; 

    public class Form extends MovieClip 
    { 
     private var nextButton:Button; 
     private var prevButton:Button; 

     public function Form() 
     { 
      setupNavigation(); 
     } 

     private function setupNavigation():void 
     { 
      nextButton = new Button(); 
      nextButton.label = "Next"; 
      // ... size and position code 
      nextButton.addEventListener(MouseEvent.CLICK, moveForward); 

      prevButton = new Button(); 
      prevButton.label = "Previous"; 
      // ... size and position code 
      prevButton.addEventListener(MouseEvent.CLICK, moveBackward); 

      addChild(nextButton); 
      addChild(prevButton); 
     } 

     // Setup Mouse events 
     private function moveForward(event:MouseEvent):void 
     { 
      nextFrame(); 
     } 

     private function moveBackward(event:MouseEvent):void 
     { 
      prevFrame(); 
     } 
    } 
} 

回答

1

你有你的主時間軸的引用傳遞到您的Form類,使用setter功能

var form:Form = new Form(); 
form.mainTimeline = this; 
addChild(form); 

在Form類(不是一個片段,類是正確的術語),添加下面的函數和變量:

private var _mainTimeline:Object; 

public function set mainTimeline(mtl:Object):void 
{ 
    _mainTimeline = mtl; 
} 

然後在你的前進/後退功能改變prevFrame()和nextFrame()於:

_mainTimeline.prevFrame(); 
_mainTimeline.nextFrame(); 

有幾種方式來完成你想要達到的,這意味着改變部分的方法。你的方式是做到這一點的一種方式。也許有一些更好的方法,但你在這裏的方法並不明顯或任何錯誤。 :)

+0

您可以將`_mainTimeLine`屬性鍵入MovieClip而不是Object,並對`mtl`參數執行相同的操作。 – Taurayi 2011-02-17 23:13:01

0

更好,更乾淨的方法是使用Document類。文檔類將通過使Form類自身充當時間線來消除將時間線引用傳遞給Form類的需要。

以下是你將如何做到這一點。在您的fla文件中,取消選擇您選擇的任何對象,然後查看屬性工具欄。在「發佈」標題下,您會在其旁邊看到一個帶有「類:」的可編輯文本字段。爲你的fla輸入你的class相對路徑,在這種情況下,這只是類名,因爲你沒有定義一個包。所以只需在那裏輸入「Form」。一個文檔類總是需要擴展一個DisplayObjectContainer,它包含MovieClip和Sprite,所以你已經編寫的Form類應該可以很好地工作。

一旦完成,您可以調用nextFrame()和prevFrame(),就像您在問題中所做的那樣,它應該可以正常工作。