所以,我需要将一个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函数中初始化迷宫和单独移动功能,所以开关按预期工作。我试图在全球宣布迷宫,并通过它来避免一些问题。 –