1

如何访问 Costum Class 中的 Stage Class 属性?

班级:

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.
4

3 回答 3

3

扩展 Joel 所说的内容,并将其置于上下文中:

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

当您将对象添加到舞台时,会触发事件 ADDED_TO_STAGE,让您知道 .stage 属性现在已填充。之后,您可以从对象中的任何位置访问舞台。

希望能为你澄清事情。

于 2009-07-26T18:34:20.643 回答
2
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;
}

您将无法访问构造函数中的阶段(除非您将阶段注入到类中)。Sprite 具有舞台属性。

于 2009-07-26T16:29:33.280 回答
0

当 flash 用你的 .as 文件编译 fla 资产时,没有阶段。所以代码是作为你的文档类的准备而启动的,你必须听是否有一个阶段,以便它可以被渲染。

这就是为什么您要收听 ADDED_TO_STAGE 以检查它实际上是否在显示列表中。

所有显示对象都会出现此问题,因为当有实际舞台时,必须将它们添加到显示列表中。

习惯于添加那个监听器,并检查一个阶段。特别是在团队中工作并且您在更大的项目中制作自己的组件时。

于 2009-07-30T08:33:28.377 回答