as3:如何使用孙子?恩。 getChildByName( “名”)。getChildByName( “NAME2”)

时间:2010-07-11 10:25:12

标签: actionscript-3 children

我正在寻找一种方法,在获取动态创建的子项显示对象实例?

trace(_view.getChildByName("name")) //returns name of display object (success)

trace(_view.getChildByName("name").getChildByName("name2")) //returns error 1061

3 个答案:

答案 0 :(得分: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 ....您可能希望添加此类检查。

另外,最后一点,如果您使用的是MovieClip类型,您只需通过名称引用该对象:

  myclip.mc_child.mc_grandchild.gotoAndStop(3);

简单地按名称引用元素更简单,更不容易出错。我强烈推荐它。

答案 1 :(得分:3)

虽然我确信Michael Aaron的答案可能有用......当我只需要参考一两件事时,我这样做:

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

这基本上只是强制显示对象像MovieClip一样,所以我可以读取它的name属性并使用它上面的任何MoveClip方法。

如果您需要引用整个项目的显示,可能会有更复杂的事情....

您还可以使用它来访问难以触及的TextFields ....     trace(TextField(MovieClip(_view.getChildByName(“name”))。getChildByName(“textfieldName”))。text);

答案 2 :(得分:-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