2008-11-18 17 views
0

是否有可能使用動作腳本2獲得在Flash動畫中具有名稱的所有實例的列表。就像包含所有命名文本區域或所有movieClip實例等的數組一樣。我希望爲了得到這個,設計人員可以添加或刪除文本區域等,動作可以動態地找到這些文件並從單獨的數據源獲取文本。在Flash動畫中獲取所有命名實例

我想我想要的東西就像一個DOM樹,或者甚至更好的東西就像getElementByName()如何在JavaScript中工作。並且還可以獲取實例名稱的字符串值,以便我可以在xml中找到它的文本值。

假設設計師添加一個名爲「copyright」的新文本區域,並且我的代碼應該(無需更改腳本)在XML文件中找到ID爲「copyright」的數據(如果有)將該值添加到文本區域。

+0

我仍然無法找到任何東西,至少這個問題現在是谷歌搜索「獲取所有實例閃存」的最高結果等。 – 2008-11-18 14:45:10

回答

2

@Stein Gauslaa Strindhaug

這是相當粗糙,但它應該做的伎倆!

private function traceAllChildren(rootContainer:DisplayObjectContainer):void { 
    for(var i=0; i < rootContainer.numChildren; i++) { 
     var item:* = rootContainer.getChildAt(i); 
     try { 
      traceAllChildren(item); 
     } catch (e:Error) { 
      trace(e.toString()); 
     } 
     trace(item.toString()); 
     // This is the block where you can affect 
     // an 'item' depending on it's type, name, etc.. 
     // eg: 
     //  if (item.toString() == '[object TextField]') { 
     //   item.text = "The text I want to insert"; 
     //  } 
     // or 
     //  if (item.name == myTextFieldNameVar) { 
     //   item.text = "The text I want to insert"; 
     //  } 
    } 
} 

然後調用它像這樣:traceAllChildren(本)或traceAllChildren(myParentMovieClip)。

我希望這會有所幫助,祝你好運!

0

自從我做了任何AS2編碼以來已經有一段時間了,但也許您可以使用MovieClip.getInstanceAtDepth()和this.getNextHighestDepth()的組合來找到電影中最高的深度,然後追溯每個較低的深度,直到您找到一個getInstanceAtDepth(),它對應於您希望用新數據填充的剪輯。

我也注意到在AS2文檔中的這個示例代碼。

下面的代碼跟蹤舞臺上所有影片剪輯實例的深度:

for (var i in this) { 
    if (typeof (this[i]) == "movieclip") { 
    trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth()); 
    } 
} 

PS:我知道你可能不願意聽到這個,但是在AS3它是抄你可以只遍歷通過this.children!

+0

在作者時間放置的元素被分配負深度,並且沒有辦法獲得最小深度。所以爲了確保遍歷所有內容,你必須從getNextHighestDepth()到-MAXINT。 – fenomas 2008-11-19 03:26:53

+0

我已經設法將我的大部分代碼轉換爲AS3,您是否願意解釋如何在AS3中執行此操作? – 2008-11-23 13:58:38

1

簡短的回答:沒有「內置」的方式來做到這一點。你可以嘗試編寫類似於getElementByName()的功能,但是它需要從_root開始,並通過內容抓取 - 嚴格來說,影片剪輯始於引用它的子節點,但它們可能會在運行時被刪除,所以這可能會失敗。

這就是說,這是一個常見的問題,有很多方法。您可能會發現更有用的一件事是創建一個附加到自定義類的自定義組件 - 比如說「TextPlaceholder」,並讓您的設計者將它們的副本放在他們想要動態文本的位置。然後在運行時,此組件可以檢查其屬性或其他自定義組件參數,並根據它們創建適當大小,內容等的文本字段。這只是接近它的一種方式。