如何从外部类访问MovieClip符号中的动态文本?

时间:2009-02-16 23:19:15

标签: flash actionscript actionscript-2

我正在使用Flash CS3和ActionScript 2.我有一个MovieClip符号(标识为“MySymbol”),其中包含一个标识符为“innerText”的动态文本块。使用以下“MySymbol.as”文件将该符号标记为“Export for ActionScript”:

class MySymbol extends MovieClip
{
        function SetText(text)
        {
                innerText.text = text;
        }
}

在框架操作中,我尝试执行以下操作:

var symInst = _root.attachMovie("MySymbol", "MySymbol" + _root.getNextHighestDepth(), _root.getNextHighestDepth());
symInst.SetText("hi");  // Fails
symInst.innerText.text = "hi";  // Works

我收到编译错误:

There is no property with the name 'innerText'.

为什么我可以从帧动作中访问innerText,但不能在.as文件本身中引用它?

2 个答案:

答案 0 :(得分:2)

您收到编译器错误,因为“innerText”在编译时不可用于该类(即运行时时可用)。

快速解决方法是使用

this['innerText'].text = text;

而不是

innerText.text = text;

答案 1 :(得分:1)

我猜测TextField“innerText”是使用Flash CS3中的Text工具创建的。如果是这种情况,那么编译器在某种程度上知道它,因为它需要从.FLA文件中获取有关它需要在舞台上创建哪些元素的信息,或者需要在库中放置哪些符号。

要从您的类中访问该属性,您需要在类中为它定义一个变量,即使它在技术上是该MovieClip的一部分。

尝试像这样修改你的课程:

class MySymbol extends MovieClip

{

    private var innerText:TextField;

    function SetText(text)
    {
            innerText.text = text;
    }

}

通过在类中添加innerText的声明,编译器将确定它正在寻找什么,并假设该属性存在,就像使用this ['innerText']一样。 (虽然这仍然是访问该财产的有效方式。