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

时间:2015-11-29 01:18:34

标签: actionscript-3 flash

我不知道导致错误的原因。我确定它非常明显。 (见下面的评论)。

package src.tilespack{

    public static var tiles:Array = [];

    public static var floorTile:Tile = new FloorTile(0); //Causes an error in FloorTile Class

    public var bitmapData:BitmapData;

    public function Tile(bitmapData:BitmapData, ID:int)
    {
        this.ID = ID;
        tiles[ID] = this;
        this.bitmapData = bitmapData;
    }

}

瓷砖:

package src.tilespack{
    import src.gfx.Assets;
    import src.tilespack.Tile;

    public class FloorTile extends Tile{ //Error here

        public function FloorTile(ID:int){
            super(Assets.floorTileData, ID);
        }
    }
}

FloorTile:

match '/articles' => 'articles#index', :via => [:get], :as => :articles
  

错误#1009:无法访问null对象的属性或方法   参考

1 个答案:

答案 0 :(得分:0)

我注意到您的代码中出现了一些问题:

1)文件 Tile 没有类的定义。可能这只是一个错字,但无论如何,这个文件看起来应该是这样的:

package src.tilespack
{
    public class Tile
    {
        public static var tiles:Array = [];

        public static var floorTile:Tile = new FloorTile(0); //Causes an error in FloorTile Class

        public var ID:int;
        public var bitmapData:BitmapData;

        public function Tile(bitmapData:BitmapData, ID:int)
        {
            this.ID = ID;
            tiles[ID] = this;
            this.bitmapData = bitmapData;
        }
    }
}

2)你的代码有类似“递归链接”的东西(抱歉,我不知道官方用语)。您的 Tile 类具有静态变量 floorTile ,并尝试创建 FloorTile 类的实例,该类本身扩展了类瓦片

所以我们有一种情况,当类 Tile 尝试使用类 FloorTile (因为静态变量应该在第一个类使用期间实例化),以及类 FloorTile 尝试使用平铺类。这是一个问题。

您可以删除 FloorTile 类型的静态变量,也可以更改 Tile 类的代码,以防止在 FloorTile 类之前使用class Tile 准备工作了。这是第二种方法的一个例子:

package src.tilespack
{
    import flash.display.BitmapData;

    public class Tile
    {
        public static var tiles:Array = [];

        private static var _floorTile:Tile;
        public static function get floorTile():Tile
        {
            if (!Tile._floorTile)
            {
                Tile._floorTile = new FloorTile(0);
            }

            return Tile._floorTile;
        }

        public var ID:int;
        public var bitmapData:BitmapData;

        public function Tile(bitmapData:BitmapData, ID:int)
        {
            this.ID = ID;
            tiles[ID] = this;
            this.bitmapData = bitmapData;
        }
    }
}