我正在Visual Studio(C#)中製作一個小型實驗遊戲 我有一個ManagerAndMovement類和一個Collision類。管理器和移動類包含pictureboxes,它們位於名爲walls的列表中,並且我試圖在foreach循環中的另一個類中使用該列表來檢測碰撞。 這裏是我的代碼:Foreach循環不能在單獨的類中工作
ManagerAndMovement類(屬性和建築工)
public List<PictureBox> walls;
public PictureBox wall;
Collision collision;
//Collider is a picturebox on the form, it is set to public
public ManagerAndMovement()
{
InitializeComponent();
collision = new Collision(Collider, this);
KeyDown += new KeyEventHandler(GameManager_KeyPress);
this.Controls.Add(PlayerTexture);
this.KeyDown += new KeyEventHandler(GameManager_KeyPress);
}
整個碰撞類:
class Collision
{
PictureBox Collider;
ManagerAndMovement m;
public Collision(PictureBox n, ManagerAndMovement mm)
{
Collider = n;
m = mm;
}
public bool CheckForWall(String direct)
{
foreach (PictureBox wall in m.walls)
{
if (Collider.Bounds.IntersectsWith(m.wall.Bounds))
{
if (direct.Equals("left"))
m.xWall = wall.Location.X + wall.Width;
if (direct.Equals("right"))
m.xWall = wall.Location.X - wall.Width;
if (direct.Equals("up"))
m.xWall = wall.Location.Y + wall.Height;
if (direct.Equals("down"))
m.xWall = wall.Location.Y - wall.Height;
return false;
}
}
return true;
}
}
在此行中出現的錯誤:
if (Collider.Bounds.IntersectsWith(m.wall.Bounds))
而錯誤是(指向foreach循環並突出顯示mm.wall s):
未將對象引用設置爲對象的實例。
它還建議這樣的:
使用 「new」 關鍵字來創建一個對象實例
似乎是一個合理的建議。你需要'mm'設置爲'ManagerAndMovement'的有效_instance_。從代碼中不清楚該實例應來自哪裏。也許當你創建'Collision'類時,你將該屬性設置爲包含對象? –