2011-04-20 20 views
2

我在舞臺上有一個簡單的帶有單個矩形的Flash文檔。我製作了矩形符號,一個MovieClip,並將其實例名稱設置爲「test_symbol_name」。我已將此文檔發佈到.swf。 (這裏的.fla.swfFlash:設置Flash文檔的實例名稱

在AS3 Flash Builder項目我加載瑞士法郎用裝載機,則跟蹤具有這種功能,它的顯示列表中的所有內容:

public static function traceDisplayList(container:DisplayObjectContainer, indentString:String = "->"):void { 
     var child:DisplayObject; 

     for (var i:uint=0; i < container.numChildren; i++) { 
      child = container.getChildAt(i); 
      trace(indentString, child.parent.name + " " + indentString + " " + child.name); 

      if (container.getChildAt(i) is DisplayObjectContainer) { 
       traceDisplayList(DisplayObjectContainer(child), indentString + "->"); 
      } 
     } 
    } 

這裏的輸出:

-> instance471 -> instance472 
->-> instance472 ->-> instance473 
->-> instance472 ->-> test_symbol_name 
->->-> test_symbol_name ->->-> instance474 

我的符號嵌套在instance472裏面,它在instance471裏面。

我可以通過指定包含符號(472),像這樣的代碼達到符號:

var myTestSymbol:MovieClip = (loader.getChildByName('instance472') as DisplayObjectContainer).getChildByName('test_symbol_name') as MovieClip; 

這裏是我的問題

什麼是instance472和instance471?他們是文檔和舞臺,還是其他的東西?

當我發佈swf時,實例號可以更改。我必須調整我的代碼以匹配最新的號碼才能使其工作。我怎樣才能命名instance471?

這是正確的方法,還是有更好的方法來達到我的符號實例?

+0

試着給你的Loader一個名字。看看你帶給你什麼...... – ThomasM 2011-04-20 12:25:20

+0

@ThomasM的Loader被命名爲loader:var loader:Loader = new Loader(); – 2011-04-20 13:05:07

+1

是的,我知道,但這是可變名稱。嘗試使用loader.name =「frigginLoader」給它一個實例名稱;然後再次追蹤顯示列表...我的猜測是,instance471將是你的加載器... – ThomasM 2011-04-20 15:44:26

回答

1

您可以使用getChildAt(0)而不是隨機名稱(afaik它是swf的容器)。但我認爲最安全的方法是將剪輯引用爲documentClass成員(公共變量),或者如果您需要在您的父級電影中使用它,請在導出動作符後輸入actionscript,並在完成後從父級電影創建一個新實例加載它:

loader.contentLoaderInfo.addEventListener("init", contentReady); 
function contentReady(e) { 
    var clipdef:Object=loader.contentLoaderInfo.applicationDomain.getDefinition("MyClip"); 
    var myClip:MovieClip=new clipdef() as MovieClip; 
    addChild(myClip); 
} 
+0

謝謝,getChildAt(0)的作品。 – 2011-04-21 13:55:46