由 AS3 创建的剪辑内部剪辑

Clip inside clip created by AS3

有两个片段:main_mcchild_mcmain_mc 在舞台的主时间线上。 child_mcmain_mc里面,由AS3代码创建:

var child_mc:Sprite=new Sprite;
child_mc.graphics.beginFill(0xff0000);
child_mc.graphics.drawCircle(15,20,10);
addChild(child_mc);

如何通过在主时间线上创建的 AS3 更改 child_mc 中的 x,y 等?

当您在时间轴内创建一个 var 时,它会成为该 MovieClip 的 属性,因此您可以像访问其他任何内容一样访问它 属性

因此,在主时间线上,您可以执行以下操作:

main_mc.child_mc.x = 100; 
main_mc.child_mc.y = 100;

如果我误解了,而你想要另一个方向,你可以使用 rootparent 关键字:

因此,在 main_mc 中,您可以像这样访问主时间线:

MovieClip(parent)

因此,如果您在主时间轴上有另一个名为 myClip 的对象,并且您想用 main_mc 中的代码隐藏它,您可以这样做:

MovieClip(parent).myClip.visible = false;

或者,从任何地方:

MovieClip(root).myClip.visible = false;

编辑

从您的评论看来,您正试图在创建 main_mc 的主时间轴的同一帧上访问 child_mc。这个问题是,主时间线代码将 运行 在它的任何子时间线代码之前。 (因此当您主时间线代码 运行s 时 child_mc 尚未创建)。

如果您需要一种方法来等待所有子时间线代码都具有 运行,您可以将此作为解决方法:

//add a listener to wait until the frame is done being constructed.
this.addEventListener(Event.FRAME_CONSTRUCTED,frameConstructed);

function frameConstructed(e:Event):void {
    //remove the listener so this function doesn't keep running on subsequent frames
    this.removeEventListener(Event.FRAME_CONSTRUCTED, frameConstructed);

    //do what you need to here
    trace(main_mc.child_mc);
}

你可以这样做:

var child_mc:Sprite=new Sprite;
child_mc.name = "myinnerchild";

然后:

var child:Sprite = main_mc.getChildByName("myinnerchild") as Sprite;

瞧瞧。

如果 "child_mc" 是一个全局变量,或者您将其分配给一个您可以在准备移动它时访问的变量,则代码只是...

child_mc.x = 100;