代码之家  ›  专栏  ›  技术社区  ›  dd .

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

  •  1
  • dd .  · 技术社区  · 17 年前

    类别:

    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.
    
    3 回复  |  直到 17 年前
        1
  •  3
  •   Tyler Egeto    17 年前

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

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

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

        2
  •  2
  •   Joel Hooks    17 年前
    this.addEventListener(Event.ADDED_TO_STAGE, handleAdedToStage)
    
    private function handleAddedToStage(event:Event):void
    {
        this.runAssets()
    }
    
    private function runAssets():void
    {
        obj = new a1_spr();
        addChild(obj);
        obj.x = this.stage.stageWidth/2;
    }
    

        3
  •  0
  •   martinlindelof    17 年前

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

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

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