如何在AS3中另一个Moveclip内的动画片段内访问舞台上的动态文本?

时间:2018-07-14 05:03:14

标签: actionscript-3

在询问之前,我已经阅读过其他文章以解决类似问题,但无法使其正常运行。我在舞台上有一个动态文本,实例名称为txtX。然后在主时间轴第1帧的动作脚本中,使用以下代码添加现有的影片剪辑mc1:

var mc = new MC();
addChild(mc);

然后我在主时间轴的第1帧上添加带有动作脚本的另一个动画片段mc2,并将其作为子元素添加到mc1。

var mc2 = new MC2();
mc.addChild(mc2);

现在,在mc2的类(为export AS创建的类)中,我试图修改动态文本的文本,但是我一生都无法弄清楚如何引用它。我想说:

stage.txtX.text = "blah blah";

甚至

parent.parent.txtX.text = "blah blah";

但是我通常会收到类似以下的错误:

Access of possibly undefined property txtX through a reference with static type flash.display:DisplayObjectContainer.

上面的错误是针对parent.parent.txtX.text行的。请告诉我我在做什么错。谢谢。我也知道变量名是荒谬的,但这仅是我的示例。在我的代码中,名称更有意义。

2 个答案:

答案 0 :(得分:0)

当您在主时间轴上放置一个文本字段并为其指定实例名称txtX时,它实际上不是stage的直接子代。阶段将是其祖父母(主/根时间轴将是其父级)。

这样,如果mc1mc2是兄弟姐妹(也在主时间轴上),则可以这样访问文本字段:

MovieClip(parent).txtX.text = "Hello";

或者,您可以使用root关键字访问根(主)时间轴:

MovieClip(root).txtX.text = "Hello";

无论深度或嵌套如何,该方法都可以在任何时间轴上工作。

答案 1 :(得分:-1)

我终于明白了。不确定这样做是否正确,但是在父级MoveieClip中,我在代码中创建了一个TextField:

import flash.text.TextField;
import flash.text.TextFormat;

public var txtX:TextField;
txtX = new TextField(); txtX.x=0; txtX.y=0; addChild(txtX);
public function changeTxt( t )
{
    tf = new TextFormat();
    tf.size=4;
    tf.color = 0xFFFF00;
    txtX.text = t;
    txtX.setTextFormat(tf);
}

然后在我的MovieClip子类中,我这样调用父级的方法:

MovieClip(parent).changeTxt( "Hello" );

比我期望的要多得多的工作,但这似乎行得通。