所以,我需要將一個Labyrinth類的實例從Form1類傳遞給Player類,當按下一個鍵時,玩家就可以在迷宮中移動,沒有碰撞。 首先,我在全局聲明一個Labyrinth對象,這樣當在OnMouseClick函數中創建它時,它將在類中的任何地方都可用,然後在OnKeyPress函數中,我將它傳遞給Player類的一個實例,並使用Move函數執行移動並檢查碰撞。
我得到「對象引用未設置爲對象的實例」異常,我不明白爲什麼它不起作用。也許我在聲明或實例化迷宮課的地方搞砸了,但我根本不知道用另一種方式去做。有什麼建議麼?將一個類的實例作爲參數傳遞給C#
namespace Labyrinth
{
public partial class Form1 : Form
{
Player player = new Player();
Labyrinth labyrinth;
private void OnMouseClick(object sender, MouseEventArgs e)
{
if (window=="lvlSelect")
string clicked = levelMenu.Click(e);
switch (clicked)
{
case "1":
level = 1;
Labyrinth labyrinth = new Labyrinth(level);
break;
case "2":
level = 2;
Labyrinth labyrinth = new Labyrinth(level);
break;
case "3":
level = 3;
Labyrinth labyrinth = new Labyrinth(level);
break;
}
}
private void OnKeyPress(object sender, KeyPressEventArgs e)
{
char key = e.KeyChar;
if (window == "game")
{player.Move(k = key.ToString(), labyrinth)}
}
}
}
namespace Labyrinth
{
class Player
{
int playerPosX;
int playerPosY;
public void Move(string key, Labyrinth labyrinth)
{
switch (key)
{
case "a":
if (!(playerPosX - 1 < 0) &&
(labyrinth.CheckCollision(playerPosX - 1, playerPosY)==false)) //I get the exception here
playerPosX--;
break;
case ...
}
}
}
}
'迷宮迷宮=新迷宮(電平);'應該只是'迷宮=新迷宮(電平);'。 –
你的問題可能是因爲'clicked'不等於'1','2'或'3',這會導致'迷宮'不被初始化。嘗試在'switch'語句中添加一個'default'。此外,您可以通過簡單地編寫'Labyrinth labyrinth = new Labyrinth(int.Parse(clicked))'來完全消除'switch'聲明;' – Icemanind
感謝您的回答。 它應該被初始化,因爲它完美的工作,如果我在OnKeyPress函數中初始化迷宮和單獨移動功能,所以開關按預期工作。我試圖在全球宣佈迷宮,並通過它來避免一些問題。 –