2015-10-19 70 views
-1

我有一個.fla文件,裏面有一些movieclip實例放置在場景中。我需要遍歷它們並收集一些數據,如位置,名稱和自定義屬性。從MovieClip中讀取屬性的最佳方法?

這些自定義屬性,我不知道如何傳遞它們,我知道目前工作的一種方式是使用輔助功能屬性面板(Flash Pro CC),然後在代碼中我可以讀取它們。但是,我應該有更好的方式。

回答

1

如果我已經正確理解了你的問題以及你在評論中對@Aaron的回答所說的話,那麼你有一個swf文件,可以動態加載,並且你想要獲取/設置它的一些影片剪輯的屬性,如果是這種情況,藉此例如:

MyMC.as:

public class MyMC extends MovieClip 
{  
    private var timer:Timer; 
    private var rotation_speed:int = 1; 

    public function MyMC() { 
    } 
    public function set_Rotation_Speed(_rotation_speed:int): void { 
     this.rotation_speed = _rotation_speed; 
    } 
    public function get_Rotation_Speed(): int { 
     return this.rotation_speed; 
    } 
    public function start_Rotation(): void {    
     this.timer = new Timer(500, 10); 
     this.timer.addEventListener(TimerEvent.TIMER, on_Timer); 
     this.timer.start(); 
    } 
    private function on_Timer(e:TimerEvent): void { 
     this.rotation += this.rotation_speed; 
    } 
} 

然後,在我的swf.swf我有一個影片剪輯的一個實例。

我使用此代碼加載swf.swf

var loader:Loader = new Loader() 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_SWFLoad); 
    loader.load(new URLRequest('swf.swf')); 

並設置/獲取我的一些影片剪輯的屬性的,我所做的:

function on_SWFLoad(e:Event): void 
{  
    var swf:DisplayObjectContainer = DisplayObjectContainer(loader.content); 
    var num_children:int = swf.numChildren; 

    for(var i:int = 0; i < num_children; i++) 
    {   
     var child:MovieClip = MovieClip(swf.getChildAt(i)); 

     // get the name 
     trace('name : ' + child.name); 

     // set the position 
     child.x = child.y = 100; 

     // get the class name, in my case it's MyMC 
     var class_name:String = getQualifiedClassName(child); 

     // get all the details of the child 
     trace(describeType(child)); 

     child.set_Rotation_Speed(45); 
     child.start_Rotation(); 

     trace(child.get_Rotation_Speed());  // gives : 45   
    } 

    addChild(loader); 
} 

可以使用describeType()函數來獲取所有您的實例的屬性。

希望能有所幫助。

+0

因此,我創建並放置在舞臺上(Flash Pro CC中)的新符號將用作類MyMC而不是MovieClip,對吧?在那種情況下,我如何將MyMC分配給符號的類?我試圖做到這一點,但它的工作原理有點笨拙,它要求我保存一個新的.as文件,但它永遠不會使用它。 – Artemix

+0

@Artemix是的,沒錯,它是MovieClip的一個子類。如果您需要編輯該類,請執行此操作,否則Flash將自動生成該類。 – akmozo

0

首先,您可以從代碼設置時間線實例的屬性。這沒什麼特別的。例如:

  1. 將庫符號的一個關鍵幀實例
  2. 給它在屬性面板實例名稱,例如「將myInstance」
  3. 在相同的關鍵幀放置一些代碼,是指它,比如myInstance.color = "red"

您還可以創建並通過使符號組件指定自定義屬性:

  1. 右鍵單擊庫中的符號並選擇「組件定義」
  2. 在參數表中添加自定義屬性。它現在是一個組件符號。
  3. 在時間軸上,放置符號的實例並使用「屬性」面板設置其參數。

如果需要,您可以使用組件進行更多操作,例如實時預覽和編譯組件。更多信息可以在這裏找到:http://www.adobe.com/devnet/flash/learning_guide/components/part03.html

+0

組件定義部分會很好,我只需要能夠從代碼中讀取這些值。我沒有使用Flash來編寫代碼,只是爲了創建一些動作。 – Artemix

+0

您可以使用實例名稱和屬性名稱從代碼中引用它們,例如:'myInstance.color' – Aaron

+0

是的,這是行不通的。我需要澄清的是,我正在閱讀IDE內的屬性,而不是在時間軸內。我正在動態加載我的SWF,然後我正在嘗試讀取那裏的值。例如,我添加了一個默認值爲「asd」的myVar,然後在我的代碼中,我做了unit1.myVar,它返回undefined。 – Artemix

相關問題