1

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

MySymbol 类扩展了 MovieClip
{
        函数 SetText(文本)
        {
                innerText.text = 文本;
        }
}

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

var symInst = _root.attachMovie("MySymbol", "MySymbol" + _root.getNextHighestDepth(), _root.getNextHighestDepth());
symInst.SetText("hi"); // 失败
symInst.innerText.text = "嗨"; // 工作

我得到编译错误:

没有名称为“innerText”的属性。

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

4

2 回答 2

2

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

快速解决方法是使用

this['innerText'].text = text;

代替

innerText.text = text;
于 2009-02-16T23:48:04.010 回答
1

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

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

尝试像这样修改你的类:

class MySymbol extends MovieClip

{

    private var innerText:TextField;

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

}

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

于 2009-02-17T21:33:41.623 回答