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 |
您的视图将始终在需要时更新。