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