类构造函数发生System.NullReferenceException

时间:2014-09-21 02:24:56

标签: c# xna nullreferenceexception

我整天都在收到System.NullReferenceException错误而且我没有想法,所以作为最后的手段 - 我在这里。

游戏太大而无法发布,所以我保持简单。我正在使用XNA框架制作纸牌游戏,我所做的是创建一个卡片构造器,通过Card构造函数组装52张卡片卡片[],如下所示。 deck []中的每个card元素都有一个等级,套装和矩形,用于绘制图像。我知道西装拼错了。我打算把它拿出来,因为我不需要它。只是想在我进入之前先完成此错误。

public Deck(Game game, ref Texture2D textureElement)
        : base(game)
    {
        gm = game;
        txt2d = textureElement;
        allFaceRect = makeRectFaces();

        for (int crdAmt = 0; crdAmt < 52; crdAmt++)
        {

            int cardNum = 0;
            rankAs = 2;
            string[] face = { "clubs", "diamonds", "hearts", "spades" };
            for (int suit = 1; suit < 13; suit++)
            {
                for (int rank = 1; rank <= 4; rank++)
                {
                    if (rankAs < 12)
                    {
                        Rectangle rectFace = allFaceRect[cardNum];
                        currentSuit = face[rank - 1];
                        deck[cardNum++] = new Card(game, rankAs, currentSuit, rectFace);
                    }
                    if (rankAs >= 12)
                    {
                        rankAs = 10;
                        Rectangle rectFace = allFaceRect[cardNum];
                        string currentSuit = face[rank - 1];
                        deck[cardNum++] = new Card(game, rankAs, currentSuit, rectFace);
                    }
                }
                if (rankAs >= 12)
                    rankAs = 10;
                else
                rankAs++;
            }
        } 
        crdTexture = textureElement;
        //crdPos = new Vector2();


    } 

现在,当我执行代码时,它将按原样处理4张卡。我再次按回车键,它会以同样的方式再次发出4张牌。但是,如果有足够的尝试,有时甚至在第一次尝试时,会出现nullReferenceException错误,说明deckCull()中的deck是null,这是下面的函数。我已经尝试了很多东西,使它不为空,但仍然会发生错误。我不明白这个错误。这很奇怪。 visual express中的错误消息说我可以为此抛出异常。除非有人能指出为什么会不断出现错误,否则我将如何为此抛出异常是我真正的问题?

public void getCrd(GameTime gameTime)
    {
        Deck dd;
        dd = new Deck(gm, ref txt2d);
        dlrPosArr = dealerPositions();
        plyrPosArr = playerPositions();
        count = 0;
        if (count <= 3)
        {
            for (int cnt = 0; cnt <= 3; cnt++)
            {
                count = cnt;
                int i = randNum();
                if (count == 0 || count== 2)
                {    
                    face = new Rectangle();

                    face = deck[i].getFace(); // <<-- Null error here
                    crdRect[cnt] = face;
                    pCrds[cnt] = deck[i].getRank();
                    string zero = "zero";
                    System.Diagnostics.Trace.WriteLine(zero);
                    System.Diagnostics.Trace.WriteLine(pCrds[cnt]);
                    base.Draw(gameTime);
                }
                else if (count == 1 || count == 3)
                    face = new Rectangle();

                face = deck[i].getFace();
                    crdRect[cnt] = face;
                    dCrds[cnt] = deck[i].getRank(); //<<--- Null error here
                    string d = "dealer";
                    System.Diagnostics.Trace.WriteLine(d);
                    System.Diagnostics.Trace.WriteLine(dCrds[cnt]);
                    base.Draw(gameTime); 

            }
            ++count;
        }
        else
        pTotal = pCrds[0] + pCrds[2];
        dTotal = dCrds[1] + dCrds[3];
        string t = "totals";
        System.Diagnostics.Trace.WriteLine(t);
        System.Diagnostics.Trace.WriteLine(pTotal);
        System.Diagnostics.Trace.WriteLine(dTotal);

    }

作为附注(可能有助于找出问题),字符串零输出pCard []数字,它也会输出dCrds的数字。这不是假设这样做,因为计数不是1或3.它是一个奇怪的错误,我想知道这是否是一个相关的问题?

0 个答案:

没有答案