2010-07-11 35 views

回答

3

是的,你可以。問題是DisplayObjectContainer.getChildByName()返回類型DisplayObject,並且任意顯示對象可能是或不可能是DisplayObjectContainer。所以,當你能做到這一點,首先需要把結果的類型的DisplayObjectContainer:

public static function getGrandChildByName(
     parent : DisplayObjectContainer, 
     child : String, 
     grandchild : String 
) : DisplayObject { 
    var child_obj : DisplayObject = parent.getChildByName(child); 
    var child_container : DisplayObjectContainer = child_obj as DisplayObjectContainer; 
    return child_container.getChildByName(grandchild); 
} 

注意,在我上面給的例子,我沒有做任何檢查,以確認孩子實際上是存在的並且是DisplayObjectContainer ....在實際生產代碼中,您可能想要添加這樣的檢查。

此外,最後一個音符,如果你使用的類型影片剪輯,你可以簡單地參照對象由它的名字:

myclip.mc_child.mc_grandchild.gotoAndStop(3); 

簡單地指的名字的元素更簡單,更不容易出錯。我強烈推薦它。

+0

+1對於時髦的參數格式。大聲笑 – gMale 2010-07-11 17:17:37

+0

@gmale,你是什麼意思? – 2010-07-11 17:43:58

+0

只是愚蠢的。你的每個函數參數都是在他們自己的行上。結合「:」周圍的空間,給出函數簽名「pizzzz!」 +1爲pizzazz。 – gMale 2010-07-11 18:04:12

3

雖然我相信邁克爾·阿龍的回答可能是有用的...當我需要引用只有一個或兩個項目,我做這種方式:

trace(MovieClip(MovieClip(_view.getChildByName("name")).getChildByName("name2")).name); 

這基本上只是強迫顯示對象變成像MovieClip一樣操作,這樣我就可以讀取它的名稱屬性並使用任何MoveClip方法。

如果您需要引用項目的整個顯示器,更復雜的東西可能是爲了....

你也可以用它來訪問難以到達的TextField .... 跟蹤( TextField(MovieClip(_view.getChildByName(「name」)).getChildByName(「textfieldName」)).text);

-1
var parentMc1:Object=this.parent.getChildByName('myMc1') as Object; 
var parentInMc2:Object=parentMc1.getChildByName('myMc2') as Object; 

//parent.myMc1.myMc2.gotoAndStop(2); // WRONG 
parentInMc2.gotoAndStop(2); // TRUE 
_______________ 
var parentMc2.. 
var parentMc3.. 
var parentMc4.. 
. 
. 
. 
Limitless mc using 
相關問題