Actionscript 3 自定义类中的ActionScript 3.0阶段宽度

Actionscript 3 自定义类中的ActionScript 3.0阶段宽度,actionscript-3,actionscript,stage,Actionscript 3,Actionscript,Stage,如何访问Costum类中的阶段类属性 类别: package { import Main; import flash.events.*; import flash.display.Sprite; import flash.display.Stage; public class Run extends Sprite { var obj:a1_spr; public function Run() {

如何访问Costum类中的阶段类属性

类别:

package {
    import Main;
    import flash.events.*;
    import flash.display.Sprite;
    import flash.display.Stage;

    public class Run extends Sprite {
        var obj:a1_spr;


        public function Run() {
            runAssets();

        }



        private function runAssets():void {
            obj = new a1_spr()
            addChild(obj);
            obj.x = stage.stageWidth/2;

        }
    }
}
TypeError: Error #1009: Cannot access a property or method of a null object reference.
输出:

package {
    import Main;
    import flash.events.*;
    import flash.display.Sprite;
    import flash.display.Stage;

    public class Run extends Sprite {
        var obj:a1_spr;


        public function Run() {
            runAssets();

        }



        private function runAssets():void {
            obj = new a1_spr()
            addChild(obj);
            obj.x = stage.stageWidth/2;

        }
    }
}
TypeError: Error #1009: Cannot access a property or method of a null object reference.
您将无法访问构造函数中的stage(除非将stage注入到类中)。Sprite具有阶段属性


您将无法访问构造函数中的stage(除非将stage注入到类中)。Sprite有一个stage属性。

要扩展Joel所说的内容,并将其放到上下文中:

每个显示对象都有一个.stage属性,但在将显示对象添加到显示列表之前,该属性为空。因此,在构建过程中,您将永远无法访问它(因为它会在之后添加)

将对象添加到阶段时,添加到阶段的事件将被触发,但您知道.STAGE属性现在已填充。之后,您可以从对象中的任何位置访问该阶段


希望这能为您澄清一些事情。

要进一步阐述Joel所说的内容,并将其置于上下文中:

每个显示对象都有一个.stage属性,但在将显示对象添加到显示列表之前,该属性为空。因此,在构建过程中,您将永远无法访问它(因为它会在之后添加)

将对象添加到阶段时,添加到阶段的事件将被触发,但您知道.STAGE属性现在已填充。之后,您可以从对象中的任何位置访问该阶段


希望这能为您澄清问题。

当flash用您的.as文件编译fla资产时,没有任何阶段。因此,代码是作为documentclass的准备而启动的,您必须倾听是否有一个阶段,以便能够呈现它

这就是为什么要听ADDED_to_STAGE,检查它是否在显示列表中

所有显示对象都会出现此问题,因为当存在实际阶段时,必须将其添加到显示列表中


习惯于添加该侦听器,并检查是否有阶段。特别是在团队中工作时,以及在大型项目中执行自己的组件时。

当flash使用.as文件编译fla资产时,没有阶段。因此,代码是作为documentclass的准备而启动的,您必须倾听是否有一个阶段,以便能够呈现它

这就是为什么要听ADDED_to_STAGE,检查它是否在显示列表中

所有显示对象都会出现此问题,因为当存在实际阶段时,必须将其添加到显示列表中


习惯于添加该侦听器,并检查是否有阶段。特别是在团队中工作时,以及在大型项目中完成自己的组件时。

。它起作用了。但我不确定我是否理解为什么。您能解释一下为什么我必须使用listener运行它吗?在将所有DisplayObjects添加到显示列表之前,它们的stage属性都为null,因此在尝试访问它之前,您需要确保该对象在其中;)当您使用var myObject:myObject=new myObject()实例化对象时,构造函数会立即运行,包括在构造函数内部调用的任何方法。即使新MyObject后面的下一行是addChild(MyObject),MyObject也不会出现在舞台上,或引用舞台。您还可以使stage:stage成为MyObject的构造函数参数,这样新的MyObject(this.stage)就可以立即访问应用程序的stage.Tank。它起作用了。但我不确定我是否理解为什么。您能解释一下为什么我必须使用listener运行它吗?在将所有DisplayObjects添加到显示列表之前,它们的stage属性都为null,因此在尝试访问它之前,您需要确保该对象在其中;)当您使用var myObject:myObject=new myObject()实例化对象时,构造函数会立即运行,包括在构造函数内部调用的任何方法。即使新MyObject后面的下一行是addChild(MyObject),MyObject也不会出现在舞台上,或引用舞台。您还可以使stage:stage成为MyObject的构造函数参数,这样新的MyObject(this.stage)就可以立即访问应用程序的stage。