关于actionscript 3:获取不在第一帧的实例对象

Get instance objects which are not on first frame

我正在使用 actionscript 3.0 和 Flash Professional CS5.5
我遇到了不在第一帧上的实例对象的问题。
我的第一帧是菜单,第二帧包含 TLF 文本字段。
我为文本字段指定了一个实例名称,假设为"username_txt"。
现在,如果我关闭"自动声明阶段实例"并在我的主类中执行此操作

1
2
3
4
5
6
7
8
 public class MainClass extends MovieClip {

        public var username_txt:TLFTextField;

        public function MainClass() {
            username_txt.text ="anything";
        }
 }

我将收到一个运行时错误,指出我尝试访问空对象的属性。 (我已经导入了所有必要的类,所以这不是问题)

但是,当我将文本放在第一帧时,不会发生这种情况。

有什么帮助吗?

提前致谢


由于尚未到达框架,因此尚未实例化文本字段,因此我不确定是否有一种优雅的方式来执行此任务。

也许更好的模型是将数据模型与视图分离。

创建一个单例类来存储数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package
{

    public class ApplicationModel
    {

        /** Singleton instance. */
        private static var instance:ApplicationModel = new ApplicationModel();

        /** Return singleton instance. */
        public static function getInstance():ApplicationModel
        {
            return instance;
        }

        /** Data Model */
        public var username:String;

        /** Constructor as singleton enforcer */
        public function ApplicationModel()
        {
            if (instance)
                throw new Error("ApplicationModel is a singleton and can only be accessed through ApplicationModel.getInstance()");
        }

    }
}

然后从关键帧或类等任何地方,您可以获取对象的实例,实现为:

1
ApplicationModel.getInstance().username ="test";

或者更好的做法是:

1
2
var applicationModel:ApplicationModel = ApplicationModel.getInstance();
applicationModel.username ="test";

根据你的例子:

1
2
3
4
5
6
7
8
public class MainClass extends MovieClip {

    public var username_txt:TLFTextField;

    public function MainClass() {
        ApplicationModel.getInstance().username ="anything";
    }
}

然后,在需要更新 TLFTextField 的帧(第 2 帧的帧脚本)上,根据模型设置文本:

1
username_txt.text = ApplicationModel.getInstance().username

您的视图将始终在需要时更新。