2016-04-22 4 views
0

Visual Studio(C#)で小さな実験ゲームを作成しています 私はManagerAndMovementクラスとCollisionクラスを持っています。マネージャと運動クラスには壁というリストにあるピクチャボックスが含まれており、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); 

    } 

全体の衝突クラス: はここに私のコードです

if (Collider.Bounds.IntersectsWith(m.wall.Bounds)) 

そして:エラーは、この行で発生し

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; 

    } 

} 

エラーは(foreachループを指して強調表示するmm.wall s):

オブジェクト参照がオブジェクトのインスタンスに設定されていません。

また、この提案:

+0

ManagerAndMovementインスタンスを渡すために "新しい" キーワードを使用します合理的な提案のようです。 'mm'は' ManagerAndMovement'の有効な_instance_に設定する必要があります。そのインスタンスがどこから来るべきかはあなたのコードからは全く分かりません。おそらく、 'Collision'クラスを作成したときに、そのプロパティをオブジェクトを含むオブジェクトに設定したでしょうか? –

答えて

0

変更Collisionクラスのコンストラクタオブジェクトのインスタンスを作成し、それに

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クラスを示しました。 T –

関連する問題