【问题标题】:AS3 Error 1009 : Cannot access a property or method of a null object referenceAS3 错误 1009:无法访问空对象引用的属性或方法
【发布时间】:2013-11-01 17:55:18
【问题描述】:

Main.as

package{
import flash.display.MovieClip;
import flash.events.*;

public class Main extends MovieClip {
    public var _root:MovieClip;

    public var monsterContainer:MovieClip = new MovieClip();


    public var delay = 30;

    public function Main(){
        addEventListener(Event.ADDED, beginClass);
        addEventListener(Event.ENTER_FRAME, enterFrameEvents);
    }

    function beginClass(e):void{
        _root = MovieClip(root);
    }

    function enterFrameEvents(e):void{

        addChild(monsterContainer);
        delay -= 1;
        if(delay <= 0){
            var spawn:Slime = new Slime();
            spawn.x = startPoint.x;
            spawn.y = startPoint.y;
            monsterContainer.addChild(spawn);
            delay = 30;
        }

    }
}

箭头.as

package{
import flash.display.MovieClip;
import flash.events.*;

public class Arrow extends MovieClip {
    public var _root:MovieClip;

    public var facingID;

    public function Arrow(){
        addEventListener(Event.ADDED, beginClass);
        addEventListener(Event.ENTER_FRAME, enterFrameEvents);
    }

    function beginClass(e):void{
        _root = MovieClip(root);
    }

    function enterFrameEvents(e):void{

        trace(_root.monsterContainer == null);

    }
}

在输出中它看起来像这样:

false 
false
false
false
false
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Arrow/enterFrameEvents()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Arrow/enterFrameEvents()

一开始说false是因为trace(_root.monsterContainer == null),但是突然说error 1009,我用ctrl+shift+enter的时候,指向trace(_root.monsterContainer == null);

我试了两天,请帮忙

其他代码:(实际上可能不相关)

敌人.as

package{
import flash.display.MovieClip;
import flash.events.*;

public class Enemy extends MovieClip {
    public var _root:MovieClip;

    //Status
    public var monsterSpeed;
    public var facing = "Right";

    //CallingArrow
    public var down:Down = new Down();

    public function Enemy(){
        addEventListener(Event.ADDED, beginClass);
        addEventListener(Event.ENTER_FRAME, enterFrameEvents);
    }

    function beginClass(e):void{
        _root = MovieClip(root);
    }

    function enterFrameEvents(e):void{

        //Facing Movement
        if(_root.pausing == false){
            if(facing == "Right"){
                this.x += monsterSpeed;
            }else if(facing == "Left"){
                this.x -= monsterSpeed;
            }else if(facing == "Down"){
                this.y += monsterSpeed;
            }else if(facing == "Up"){
                this.y -= monsterSpeed;
            }
        }


    }
}

下来.as

package  {
import flash.display.MovieClip;
import flash.events.*;


public class Down extends Arrow {

    public function Down(){

        facingID = "Down";
    }
}

史莱姆.as

package  {
import flash.display.MovieClip;
import flash.events.*;


public class Slime extends Enemy {

    public function Slime(){

        monsterSpeed = 5;

    }
}

时间轴上没有额外的代码,只需 stop();

如果你需要文件(cs6):http://www.mediafire.com/download/hz5tptkgftwdipw/Tower_Defense.rar

【问题讨论】:

  • 看起来 _root 以某种方式变为空。如果 monsterContainer 为 null,它不会抛出错误,你只会得到一个 true 的痕迹。
  • 是的,它应该被追踪为真的,但是我知道为什么突然出现错误 1009,这太烦人了,知道吗?
  • 我怀疑你没有在这里显示完整的代码。您要删除箭头实例吗?你甚至在哪里实例化它?它在任何地方都看不到......
  • @Fygo 其他代码与此无关,嗯,我不删除箭头实例,所以箭头就像一个 .as 从 Main.as 跟踪 monsterContainer
  • @YogaAdyaPratama 您操作和实例化箭头的代码与您的问题有关,因为它是向您抛出错误的对象。除非您更改了“_root”、“monsterContainer”或箭头实例/引用,否则这种情况不太可能发生。你肯定会做其中之一。

标签: actionscript-3 flash adobe flash-cs6


【解决方案1】:

改成这样:

public function Arrow(){
    addEventListener(Event.ADDED, beginClass);
}

function beginClass(e):void{
    _root = MovieClip(root);
    addEventListener(Event.ENTER_FRAME, enterFrameEvents);
}

在您的代码中_root 将为NULL,因为您的对象可能不会在同一帧中添加到舞台所以

function enterFrameEvents(e):void{

    trace(_root.monsterContainer == null);

}

将尝试访问 NULL 对象的monsterContainer 属性。因此,好旧的 #1009

【讨论】:

  • 显然,适用于所有其他类的情况相同,即:敌人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多