伊莉討論區

標題: Visual C# Null Reference Exception,是出什麼問題?如何解決? [打印本頁]

作者: abc6308774    時間: 2012-1-11 12:44 AM     標題: Visual C# Null Reference Exception,是出什麼問題?如何解決?

本帖最後由 arthurliuliu 於 2012-1-11 07:47 AM 編輯

我是要寫類似冰上曲棍球的遊戲,以下是說明...(註:球的數量設定為讓玩家可以輸入1~100一次出現在檯面上,所以才有Balls的變數)

擋板就是指守在球門前的阻擋物,我是用工具箱裡的picturebox建立的。擋板大小為10,50。
以下是寫碰到擋板球就要反彈的程式碼片段:

  1. if (Balls.position[0] <= 擋板1.Location.X + 10 && Balls.position[0] >= 擋板1.Location.X && Balls.position[1] >= 擋板1.Location.Y && Balls.position[1] <= 擋板1.Location.Y + 50)
  2.                 {
  3.                     Balls.velocity[0] = Balls.velocity[0] * -1;
  4.                     Balls.velocity[1] = Balls.velocity[1] * 1;
  5.                 }
複製代碼



乍看下好像沒問題(自我感覺良好?):只要球的位置跑在擋板內部,就反彈。(因為擋板為細長狀,故微小差異在執行遊戲時應該無妨)
但在執行偵錯時,「if」那一行程式碼就被黃色底的方框選取來,並顯示「Null Reference Exception」。

問題出在這,「Null Reference Exception」是什麼意思?該如何解決?
我也有點進去Visual Studio的幫助頁(http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-TW&k=k(EHNULLREFERENCE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true)
只看懂一點點,但還是不知道該如何下手改程式。
向大大求救!謝謝!

(因為此題目不一定大家懂意思,加上程式碼冗長,不方便一一解釋,所以只選取一小部分程式碼。若有熱心大大願意幫忙,需要看看其他部分的程式碼,我馬上貼上!)

code沒包,板主代為編輯。
arthurliuliu

作者: arthurliuliu    時間: 2012-1-11 07:48 AM

要請版友幫忙除錯,請附上專案檔,
光你貼的訊息,沒辦法幫你找到原因,
以上說明。
作者: 皇臾    時間: 2012-1-11 08:16 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: abc6308774    時間: 2012-1-11 11:34 AM

那就麻煩了!附上專案檔:
[attach]68493461[/attach]

順便附上我要做的題目:
[attach]68493601[/attach]
作者: arthurliuliu    時間: 2012-1-11 07:58 PM

回復 5# abc6308774
  1.             for (int i = 0; i <= ballnumber; i++)
  2.             {
  3.                 if (Balls[i].position[0] <= 擋板1.Location.X + 10 && Balls[i].position[0] >= 擋板1.Location.X && Balls[i].position[1] >= 擋板1.Location.Y && Balls[i].position[1] <= 擋板1.Location.Y + 50)
  4.                 {
  5.                     Balls[i].velocity[0] = Balls[i].velocity[0] * -1;
  6.                     Balls[i].velocity[1] = Balls[i].velocity[1] * 1;
  7.                 }

  8.                 if (Balls[i].position[0] <= 擋板2.Location.X + 10 && Balls[i].position[0] >= 擋板2.Location.X && Balls[i].position[1] >= 擋板2.Location.Y && Balls[i].position[1] <= 擋板2.Location.Y + 50)
  9.                 {
  10.                     Balls[i].velocity[0] = Balls[i].velocity[0] * -1;
  11.                     Balls[i].velocity[1] = Balls[i].velocity[1] * 1;
  12.                 }
  13.             }
複製代碼
第一行的 for 迴圈改成:
  1.             for (int i = 0; i < ballnumber; i++)
複製代碼
拿掉=符號,因為你的球如果是1,
等於要跑兩次for迴圈,當然會出現錯誤。

另外...你的class跟物件竟然用中文命名,暈 @@"
改掉這個壞習慣吧 >_<
作者: abc6308774    時間: 2012-1-12 09:10 AM

原來是這樣啊@@

謝謝版主!如果有問題再麻煩喔@@
作者: abc6308774    時間: 2012-1-13 04:34 AM

完成囉!感謝版主大大幫忙^^




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!