C#Tile类NullException

时间:2016-02-20 13:49:26

标签: c# xna

我正在制作瓷砖游戏,但我遇到了一个大问题。 这个想法是,如果选择了一个瓷砖,它会变成红色,而一些瓷砖会变成蓝色。如果你单击其中一个蓝色的单位将被选中的单位传输到那个单位,但每次执行此操作时,我选择的图块都会出现NullException。我可以使用Tile本身,但它不包含总是返回null的值或空洞。如果有人能够确定问题,我会非常感激

代码可能出现问题

Update()的一部分:

 while (j < baseLayer.MapDimensions.Y)
        {
            while (i < baseLayer.MapDimensions.X)
            {
                if (moveToMap[i, j] && standardCheck.Click(new Rectangle(i * 100, j * 100, 100, 100), mouseState, prevMouseState))
                {

                    tileArray[i, j].changeColor = Color.Gold;
                    tileArray[i, j].MoveTo(tileArray[(int)selectedTile.X, (int)selectedTile.Y].Position,
                       tileArray[(int)selectedTile.X, (int)selectedTile.Y].getUnit);// problem occors here

//问题出现在这里

                }
                else
                {
                    tileArray[i, j].Checkclick(mouseState, prevMouseState, relativeMousePosition);
                    if (tileArray[i, j].ReturnIfSelected)
                    {
                        selectedTile = new Vector2(i, j);
                    }
                    else if (selectedTile == new Vector2(i, j))
                        selectedTile = new Vector2(200, 200);

                }
                i++;

            }
            i = 0;
            j++;
        }
        j = 0;

瓷砖等级

    public Unit unit  = new Unit();
    public Unit Building = new Unit();
    public Unit getUnit
        {
        get { return unit; }
        }


    public Color tileColor = Color.White;
    public Vector2 position;
    public Vector2 drawPosition;


    public int[] map { set; get; } = new int[4];
    public bool selected = false;
           public void LoadContent(Vector2 _position ,int[,,] _map)
    {

    }
    public void Checkclick(MouseState mS, MouseState prevMS,Vector2 matrixPosition)
    {

        }
    }
    public bool checkifselectable()
    {

    }
    public void Update(int[,,] _map)
    {
        unit.Reset();
    }
    public void MoveTo(Vector2 oldTile,Unit _unit)
    {
        int change = 0;
        if (oldTile.X - position.X != 0)
           change = (int)(oldTile.X - position.X);
        if (oldTile.Y - position.Y !=0)
            change = (int)(oldTile.Y - position.Y);
        unit = _unit;
        map[2] = _unit.ID;
        if (change>= 0)
        unit.RemainingMoveSpeed = change;
        if (change < 0)
            unit.RemainingMoveSpeed = -change;
    }

非常感谢你的时间

年轻程序员

1 个答案:

答案 0 :(得分:0)

也许你有NullReferenceException。在这种情况下,当尝试取消引用空对象引用时,将抛出此异常。这可能对您有所帮助https://msdn.microsoft.com/en-us/library/system.nullreferenceexception%28v=vs.110%29.aspx