0

所以我有这个超类网格类,以及名为 GrassTile1、GrassTile2 等的网格类的子类……所有子类的实例都存储在一个数组中。我想如何将子类的实例转换为引用数组的超类?

private var backgroundGrid = []; //the array which the grids are stored in, in the main class.



public class Grid extends MovieClip
{

    protected var node :PathfindNode; //the variable I wish to access, from an instance of subclass.

    public function Grid(){
        node = new PathfindNode();
    }


}



public class GrassTile1 extends Grid { //every subclass of Grid will extends Grid


    public function GrassTile1() {
        // constructor code
    }
}

function getBackgroundGrid(i:int,j:int):Grid{ //in the main class
        return Grid(backgroundGrid[i][j]); // this line gives me an error 
    }

TypeError:错误 #1034:类型强制失败:无法将 GrassTile1@2905d5f1 转换为 Grid。

我尝试访问 backgroundGrid[i][j].node 和其他我能想到的解决方法,但都失败了。任何想法?

4

1 回答 1

0

尝试 :

return backgroundGrid[i][j] as Grid;

就个人而言,Grid这似乎是一个不好的类名。我认为Tile更有意义,因为这GrassTile1不是我在逻辑上理解网格的网格。网格可能包含一组图块,因此将其用作图块的类名听起来不合逻辑。

另外,您实际调用 getBackgroundGrid 方法的行在哪里?您应该尝试在那里进行投射,而不是使用那种方法。我相信这会解决问题。

我无法验证抛出错误的行,所以我们假设它是 return 语句。但是,它可能在您调用 getBackgroundGrid 的另一侧。

更新:我已经使用您所描述的内容尝试了一个 .fla,它工作得很好,我没有收到任何错误。这就是为什么我认为我们在这里遗漏了一些东西,也许没有使用类的定义。您可以在构造函数中添加跟踪信息以验证您期望的实际情况吗?

于 2013-11-24T15:30:35.153 回答