2008-12-20 40 views
0

我試圖從時間線中獲得動態影片剪輯。AS3時間線變量問題

我有一個未知長度的時間軸,其中一個關鍵幀(本例中假設爲88)上帶有實例名稱爲「blah」的影片剪輯。
無論我做什麼,我都無法獲得對上述影片剪輯的參考。

這裏是我的嘗試:如何通過代碼導入時間表生成的對象

trace(blah); // null 
trace(this.blah); // null 
trace(getChildByName("blah")); // null 

if(currentFrame == 88) 
    trace(getChildByName("blah")); // null 

for(var i:int=0; i<numChildren; ++i) 
    trace(getChildAt(i)); 
/* Returns: 
* [object MovieClip] 
* [object Shape] 
* null 
* [object TextField] 
*/ 

// Assuming the first movie clip is the correct one 
trace(getChildAt(0).name); // instance?? where ?? are random digits, I'm expecting "blah" 

可有人請闡明?

回答

0

如果您剛剛導航到第88幀,則可能是您在嘗試使用它之前已經初始化。嘗試添加:

stage.addEventListener(Event.ADDED, onAdded); 

function onAdded(event:Event):void 
{ 
    trace("new object "+event.target); 
    trace("new object name "+event.target.name); 
} 

,看/被創建

+0

哦,謝謝! 我從來不知道那件事。 – LiraNuna 2008-12-20 23:48:14

0

時如果加載的SWF中它的實例名稱將不提供直接,(根據您的時間線的設置)相同可以使用gotoAndStop()或gotoAndPlay()進行移動。這將迫使你實現一個解決方案,監聽Event.ADDED(在添加swf的情況下),或Event.ENTER_FRAME或Event.RENDER(用於gotoAndStop/gotoAndPlay)。

我不知道確切的細節,但對http://bugs.adobe.com/jira/browse/FP-43的評論包含有用的鏈接。

gotoAndPlay/Stop問題還有另一種解決方法 - 通過在第1幀中添加一個關鍵幀,確保您的所有符號都可用於整個動畫片段,而您已經設置了實例名稱但使該符號不可見。根據情況,這可能與聽衆解決方法一樣繁瑣,但有時更清晰。

0

LiraNuna,

我提前道歉 - 我不知道該怎麼經歷過,你是使用Flash,所以我的建議可能會帶有侮辱性的基本...

首先,你是怎麼添加的影片剪輯,併爲它分配一個名字?你是否通過IDE添加它?

如果是這樣,我經常犯的一個錯誤是當我命名一些東西時選擇了錯誤的東西。換句話說,我不是給剪輯A分配一個名字,而是將它分配給剪輯的父節點。或者更糟糕的是,我無意中分配了一個幀標籤而不是對象名稱。

您描述的行爲(而不是名稱'blah',影片剪輯的名稱爲'instance ##')與通過IDE添加剪輯一致,但未命名 - 'instance ##'是Flash IDE的默認命名方案,用於尚未命名的對象。

所以,我會仔細檢查一下,你是否已經分配了你認爲你有的名字。

另一方面,如果您以編程方式添加該剪輯,您是否可以提供您用於這樣做的代碼?

乾杯, 馬特

0

這是一個異步的問題,我們對Flash Player的9,一種簡單的解決方法就是等待ENTER_FRAME事件的第一個調度更改幀之後或使用添加的事件,當你的對象知道被添加到顯示列表中。令人高興的是,這個問題是有關Flash Player 10

http://www.bytearray.org/?p=236