Flash AS3 Dyanmic 文本不断给出错误 1119



So 我有一个方法,它接受一个字符串,然后假设将按钮上的动态文本框设置为所述字符串。

public function setText(caption:String) {
  this.btext.text = caption;
}

我真的不明白为什么这种方法会产生 1119 错误。
Access of a possibly undefined property btext through a reference with static type Button.as

动态文本框的实例名称btext,我尝试删除文本框并创建一个新文本框,但这仍然会产生 1119 错误。我还阅读了另一个堆栈问题,该问题尝试this['btext'].text = caption;这给了我很多运行时错误。

基本上我做错了什么?
感谢您的任何帮助。

编辑

这是我正在使用的代码,我创建了一个 button 实例,将其添加到舞台中,并使用此代码将其存储在数组中。

要创建按钮的代码

this.buttonArray.push(this.addChild(weaponButton));

Button.as

package  {
    import flash.display.MovieClip;
    import flash.filters.*;
    public class Button extends MovieClip {
        public function Button() {
        }
        public function setPosition(xpos:int, ypos:int) {
            this.x = xpos;
            this.y = ypos;
        }
        public function setScale(xScale:Number, yScale:Number) {
            this.scaleX = xScale;
            this.scaleY = yScale;
        }
        public function addDropShadow():Array {
            var dropShadow:DropShadowFilter = new DropShadowFilter(2,45,0, 1,4,4,1,1,true);
            return [dropShadow];
        }
        public function removeDropShadow():Array {
            return null;
        }
        public function setText(caption:String) {
            this.btext.text = caption;
        }
    }
}

如前所述,btext 是对象的实例名称。在这里,我假设 btext 是您在库中创建的对象。
在你的课堂上,你做错了两件事。因此,让我们检查一下您的方法。

public function setText(caption:String) {
  this.btext.text = caption;
}

首先错误的是你使用的是"这个"。"this"是对您所在类的当前实例的引用。你说btext是所述实例上的一个属性。正如我所假设的那样,这不是因为您将 btext 定义为库中的对象。这将为您提供您正在获得的属性是未定义的错误。

现在手头的第二个问题是你要问"好吧,我如何在我的课堂上引用 btext"。您需要知道的是,只有添加到显示列表 IE:stage 的对象才能通过舞台访问对象。
您可以通过 3 种方式执行此操作。
第一种方法是对按钮的引用传递到类中,并将其存储为类的属性。
第二种方法是将您的类添加到舞台,并在课堂中收听添加的 ToStage 事件。此时,您可以访问该对象。

MovieClip(root)["btext"].text


前 2 种方法不是很好的做法,因为 btext 不是类的一部分,一般的经验法则是封装你的类。
要使这项工作发挥作用,您可以做的是让您的类将值分配给类中的属性,然后触发一个事件并让该类的父级侦听该事件,然后只需获取值并分配。

以下是一些建议阅读

我认为变量 btext 根本不存在,还是从电影剪辑继承而来的?

相关内容

最新更新