actionscript-3 - 舞台上的对象不会在构造函数之外初始化

标签 actionscript-3 constructor flash-cs6

在我的文档类中,我已将一些放置在舞台上的对象分配给一个数组,以便稍后调用它们。

当我在构造函数外部声明数组时,对象尚未创建,并且赋值为 null,这与我在构造函数内部声明它们时不同。 为什么会发生这种情况?

如何避免这种情况?可以我可以使用监听器来跟踪对象何时加载吗?

第一个案例

package { 
   public class Document extends MovieClip {
       var obj:Array = [object1,object2];
       public function Document() {
          trace(obj[0]); // <-- null
       }
   }
}

第二种情况

package { 
   public class Document extends MovieClip {
       public function Document() {
          var obj:Array = [object1,object2];
          trace(obj[0]); // <-- reference value
       }
   }
}

enter image description here enter image description here enter image description here

最佳答案

全局变量(即任何方法之外的变量)在任何事情之前加载调用构造函数之后以及执行之前.

请改用此代码:

package { 
   public class Document extends MovieClip {
       var obj:Array;
       public function Document() {
          obj = [object1,object2];
          trace(obj[0]);
       }
   }
}

附录:

Stage 对象在构造函数代码的顶部初始化,例如 .net 中的设计器对象。

因此,由于全局变量在构造函数代码执行之前被初始化,object1object2仍然是null.

附录 2:

您有以下序列:

  1. 调用类的构造函数
  2. 全局变量已初始化(您的 obj 数组,以及 object1/object2 变量,但不是它们的值)
  3. 设计器(舞台上的图形)对象已初始化(即调用 object1 = new Object1())
  4. 执行构造函数代码

除非您在高级 AS 设置中取消选中“自动声明舞台实例”,否则舞台对象始终会自动声明和初始化。

关于actionscript-3 - 舞台上的对象不会在构造函数之外初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762206/

相关文章:

ios - AS3 AIR for iOS 获取可用存储空间

actionscript-3 - 使用 adobe flash 将外部 swf 加载到 bytearray

actionscript-3 - Actionscript,提高异或性能?

javascript - 为什么我的 Sprite 从底部被裁剪?

java - 使用 Class.forName() 实例化单例对象?

c++ - 重载构造函数的调用不明确

ios - 应用内购买 freshplanet-as3

flash - AS3 使用加载程序加载受 htaccess 保护的文件

actionscript-3 - AS3:提取的sampledata循环永远到最后一 block

javascript - 为什么这种语法会导致它的属性构造函数更长地指向它自己的构造函数?