私はC#用のXNAライブラリを使用して簡単なゲームを開発しています。次のコードスニペットでは、
コレクションが変更されました。列挙操作が実行されない場合があります。
2番目のforeachループの先頭でエラーが発生しました。私の(比較的限られた)C#の経験では、これはループ中に基になるコレクションを変更しようとしたときに発生します。ただし、私が見る限り、enemy_positionsコレクションを変更しているわけではありません。このコードのすべてのコレクションは、タイプがList<Vector2>
です。
ここで何が起きてるの?
//defines collision behaviour when enemy is hit
int be_no = 0;
List<Vector2> tmp_bullets = bullet_i_position;
List<Vector2> tmp_enemy = enemy_positions;
foreach (Vector2 bullet in bullet_i_position)
{
//get bullet collision box
Rectangle bullet_col = new Rectangle(Convert.ToInt32(bullet.X - 12), Convert.ToInt32(bullet.Y - 12), 25, 26);
int en_no = 0;
foreach (Vector2 enemy in enemy_positions)
{
//get enemy collsion box
en_box = new Rectangle(Convert.ToInt32(enemy.X), Convert.ToInt32(enemy.Y), 75, 75);
if (temp_r.Intersects(en_box))
{
//remove all colliding elements
tmp_enemy.RemoveAt(en_no);
tmp_bullets.RemoveAt(be_no);
bullet_direction.RemoveAt(be_no);
}
en_no++;
}
be_no++;
}
//update actual lists
bullet_i_position = tmp_bullets;
enemy_positions = tmp_enemy;