伊莉討論區
標題:
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。
以下是寫碰到擋板球就要反彈的程式碼片段:
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)
{
Balls.velocity[0] = Balls.velocity[0] * -1;
Balls.velocity[1] = Balls.velocity[1] * 1;
}
複製代碼
乍看下好像沒問題(自我感覺良好?):只要球的位置跑在擋板內部,就反彈。(因為擋板為細長狀,故微小差異在執行遊戲時應該無妨)
但在執行偵錯時,「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
for (int i = 0; i <= ballnumber; i++)
{
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)
{
Balls[i].velocity[0] = Balls[i].velocity[0] * -1;
Balls[i].velocity[1] = Balls[i].velocity[1] * 1;
}
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)
{
Balls[i].velocity[0] = Balls[i].velocity[0] * -1;
Balls[i].velocity[1] = Balls[i].velocity[1] * 1;
}
}
複製代碼
第一行的 for 迴圈改成:
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!