我正在寻找一种方法,在as3中获取动态创建的子项显示对象实例?
trace(_view.getChildByName("name")) //returns name of display object (success)
trace(_view.getChildByName("name").getChildByName("name2")) //returns error 1061
答案 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