我正在尝试在Child类的构造函数中传递来自Base类的数组,但是我觉得在构造函数被调用时可能存在冲突,因为Base类的getFullArray()方法返回空。
基类看起来像这样:
protected Byte[,] _byteTileArray; //is going to be implemented in child class
private Object[,] objectTileArray;
public Level_Manager(ContentManager content)
{
CreateTileArray();
objectTileArray = new Object[_byteTileArray.GetLength(0), _byteTileArray.GetLength(1)];
CreateWorld(content);
}
protected abstract void CreateTileArray();
private void CreateWorld(ContentManager content)
{
for(int row = 0; row < _byteTileArray.GetLength(0); row++)
{
for (int col = 0; col < _byteTileArray.GetLength(1); col++)
{
switch (_byteTileArray[row,col])
{
case 0: objectTileArray[row, col] = null; break;
case 1: objectTileArray[row, col] = new Cube(new Vector2(col * (852/12), row * (480/7)), content, 124, 33, new Vector2(0, 0)); break;
case 2: objectTileArray[row, col] = new Ladder(new Vector2(col * (852 / 12), row * (480 / 7)-33), content, 50, 107, new Vector2(0, 0)); break;
}
}
}
}
public Object[,] getFullArray(){
return objectTileArray;
}
我需要getFullArray()
中的objectTileArray这是Child类构造函数:
private Object[,] arrayObjects;
#endregion
public Level1(ContentManager content, GraphicsDevice device) : base(content)
{
this.content = content;
arrayObjects = getFullArray();
hero = new Hero(new Vector2(1, device.Viewport.Height-40), this.content, arrayObjects);
}
arrayObjects在这里为空。
答案 0 :(得分:0)
编辑: 显然我误解了调试,我的arrayObjects不是null,但里面的元素是。
protected override void CreateTileArray()
{
base._byteTileArray = new Byte[,]
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
{0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1},
{1, 1, 0, 2, 1, 0, 1, 1, 1, 1, 1, 2},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
}
这是我传递给Parent类的byteTileArray,它在0&#39; s(故意)上插入null但是这在另一部分给了我一个NullReferenceException,它只是通过添加if not null子句来修复。 谢谢大家,对不起!