我收到错误 #1009 说我无法访问空对象引用的属性或方法。怎么办?

Posted

技术标签:

【中文标题】我收到错误 #1009 说我无法访问空对象引用的属性或方法。怎么办?【英文标题】:I got an Error #1009 saying I Cannot access a property or method of a null object reference. Now what? 【发布时间】:2014-10-10 06:41:51 【问题描述】:

所以我在尝试运行我的游戏时遇到了这个错误。这是一个简单的小游戏,围绕着捡起轨道运行的塑料罐,同时试图避免轨道上的敌人。所以我按了 Ctrl+Shft+Enter ,发现问题出在我的 Ship Class 的第 26 行(if (this.y +...)。

package 


    import flash.display.Sprite;
    import flash.events.Event;


    public class Ship extends Sprite
    

        public function Ship(_x:int,_y:int)
        
        this.x = _x;
        this.y = _y;
        //adds event listener that allows the player to move
        addEventListener(Event.ENTER_FRAME, player_move);
    

    public function player_move(e:Event)
    
        //check if at left or right side of stage
        if (this.y - this.height / 2 <= 0)
        
            this.y = 50;
        
        if (this.y + this.height / 2 >= stage.height - this.height)
        
            this.y = 370;
        
        if (this.x - this.width / 2 <= 0)
        
            this.x = 50;
        
        if (this.x + this.width / 2 >= stage.width - this.width)
        
            this.x = 500;
        


    

    public function left():void
    
        //the speed in which the player will move left
        this.x -=  10;
    
    public function right():void
    
        //the speed in which the player will move right
        this.x +=  10;
    
    public function up():void
    
        //the speed in which the player will move right
        this.y -=  10;
    
    public function down():void
    
        //the speed in which the player will move right
        this.y +=  10;
    
  

现在我该怎么办?我该如何解决?我在任何地方都找不到答案。我知道这与我的 Main 类有关,因为我已经说过,如果玩家是他的敌人,他的船会被放回他原来的坐标。

任何帮助将不胜感激。谢谢。

【问题讨论】:

加到舞台了吗? stage 可能是无效引用。 抱歉我的无知,我是新手。但是你的意思是它被添加到舞台上是什么意思?我究竟需要做什么才能将其添加到舞台或使stage 成为有效参考? player_mve 方法的第一行应该是:if(!stage)return; 【参考方案1】:

您的 null 对象是 stage 引用。每个 DisplayObject 都有一个对舞台的引用,但是,在对象实际在舞台上之前,这是 null。

舞台是应用程序的主要容器。您的应用程序中的所有可视化内容都将以某种方式呈现在舞台上。您的主要文档类将在舞台上,所有时间线对象等。

即使您的对象被添加到不同的容器中,只要该容器以某种方式出现在舞台上,它也会被视为在舞台上。因此,用最基本的术语来说,如果对象位于用户应该能够看到的某个地方,则 stage 不会为空。

要解决此问题,您必须在将对象添加到舞台后添加 ENTER_FRAME 事件侦听器。幸运的是,您可以监听发生这种情况时触发的事件。

在构造函数中:

addEventListener(Event.ADDED_TO_STAGE, init);

然后添加你的处理程序:

private function init(evt:Event)
    addEventListener(Event.ENTER_FRAME, player_move);

请记住,stage 将是空的,直到一个对象被添加到舞台,这是我们现在正在监听的事件。然后,只需将您的船添加到主游戏或它要进入的任何容器中,container.addChild(ship),如果该容器是舞台的一部分,那么您应该很高兴。

【讨论】:

以上是关于我收到错误 #1009 说我无法访问空对象引用的属性或方法。怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript 3 错误 1009:无法访问空对象引用的属性或方法

TypeError:错误 #1009:无法访问空对象引用的属性或方法。尝试创建按钮时。

错误 #1009:无法访问空对象引用的属性或方法。 [好郁闷]

错误 #1009:无法访问空对象引用 AS3 项目的属性或方法

AS3:TypeError:错误 #1009:无法访问空对象引用的属性或方法。需要帮助

TypeError:错误 #1009:无法访问空对象引用的属性或方法 - Event.ENTER_FRAME