2016-04-22 82 views
0

我正在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」 關鍵字來創建一個對象實例

+0

似乎是一個合理的建議。你需要'mm'設置爲'ManagerAndMovement'的有效_instance_。從代碼中不清楚該實例應來自哪裏。也許當你創建'Collision'類時,你將該屬性設置爲包含對象? –

回答

0

變化Collision類的構造,並通過ManagerAndMovement實例,它

public Collision(PictureBox n, ManagerAndMovement m) 
{ 
    n = Collider; //seems wrong. it should be Collider = n 
    mm = m; 
} 
+0

你可能還會提到'n = Collider;'完成任何事情。 OP可能意味着'Collider = n;' – piedar

+0

我在代碼中添加了它(它不應該是m = mm?)。現在錯誤在不同的地方。我將更新代碼並展示更多的ManagerAndMovement類。 Ť –