2010-09-09 81 views
0

我想做的事情似乎很簡單,但被我想要在Flash的時間軸內工作的事實所迷惑,而不是在自定義類,.as文件, flex等。我是一名藝術家,代碼只能像我的資源一樣可重用(在Flash中創建/動畫),所以我傾向於在時間軸上工作。Flash AS3 - 從孩子到父母時間線的活動

我想在孩子的時間線結束時有一個腳本,它的父代的時間線進度。如果這是一個真正的AS3腳本,那麼類似這樣的東西將會在孩子的最終框架上:this.parent.gotoAndPlay(2);

我已經完成了可以工作的「修復」,但是將我的程序放慢到了不可接受的速度。例如:我將在導入的自定義類中保存一個公共靜態布爾值,並在父幀1上擁有一個「偵聽器」:

import customClass;如果(布爾=真){的gotoAndPlay(3);} //父框架2上等待子

的gotoAndPlay(1); //這將創建便宜環

和最後一個子幀:

進口customClass;布爾= TRUE //告訴父母時留下的環

這工作,但顯然不是最好的辦法......我需要的是同一個時間軸幀中的遞歸,但沒有一個堆棧溢出或編號增量。我想懷疑是EventListeners的答案,但我不想用MouseClick或Timer觸發它,我想這樣觸發它:new EventListener:EventListener(ThatGlobalVarAtTheEndOfYourChildTimelineHasBeenChanged);然後當布爾變爲true時它會進展。我確定這很容易,我覺得自己像一個白癡問這麼簡單,但所有的文檔都讓我在舞臺上工作,或者用我在代碼中創建的對象內的對象,但它不是這很容易與我想做的事情,因爲我正在製作使用多個時間軸的複雜動畫。 Flash知道哪些對象在什麼範圍內,而不是我或我的課程。

謝謝任何​​人的幫助。

回答

1

主要時間表可以發送和收聽活動並將相關信息發送給相關的孩子。

在一個子實例中,你可以寫。

 
var dispatcher:MovieClip = this.root as MovieClip; 
dispatcher.dispatchEvent(new Event('last frame reached')); 

,並在主時間軸

 
this.addEventListener("mc1 last frame reached" , eventListener); 

function eventListener(event:Event):void 
{ 
    //should return your event name 
    trace(event.type); 

    //you could use a switch statement to redirect to a specific function 

    switch(event.type) 
    { 
     case "mc1 last frame reached": 
      this.instanceName1.instanceName2.gotoAndPlay(n); 
      break; 

     case "mc2 last frame reached": 
      this.instanceName1.instanceName4.gotoAndPlay(n); 
      break; 

     ///etc... 
    } 
} 

我會親自使用自定義的事件,在那裏我可以通過孩子和任何性質的實例名稱我需要在主時間軸觸發新功能。孩子可以派發事件,但我贊成使用根作爲前端控制器。

+0

這將是乾淨的做法..我認爲,雖然,在主要時間線上,它應該是孩子。addEventListner(...) – Ben 2010-09-09 02:34:07

+0

實際上,root代表flash中最頂層的對象..子實例可以調用它自己的dispatchEvent方法(並執行child.addEventListener) – Ben 2010-09-09 02:35:37

+0

我使用根作爲前端控制器,所以this你有一個調度員,這讓我意識到我實際上在我上次編輯中犯了一個錯誤... – PatrickS 2010-09-09 02:40:52