我整天都在收到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.它是一个奇怪的错误,我想知道这是否是一个相关的问题?