어제 게시 된 두 게임의 충돌, 적과 총알에 대한 도움을 요청했습니다.충돌로 인한 removeAt() 관련 문제
는 해결책이었다 : 지금 지점에게 총알이 적 교차 할 때마다 얻을로
foreach (Enemy enemy in enemies)
foreach (Bullet bullet in bullets)
if (bullet.boundingBox.Intersects(enemy.boundingBox))
{
score += 1;
}
그리고 물론
이이 점수를 현명했다. 이 문제는 두 개체를 모두 파괴해야 할 때 발생합니다 (모든 개체가 아니라 교차 된 개체 모두). 내 첫번째 생각은 지금처럼 RemoveAt을() 함수를 사용하는 것이 었습니다 :if (bullet.boundingBox.Intersects(enemy.boundingBox))
{
score += 1;
removeAt();
}
그러나 일반적으로이 같은 "RemoveAt을 (내가)"로 인덱스로 사용되는 때문에이 작동하지 않을 물론
. 나는 다음과 같이 두 목록 내부를 나는 상단을 참조 코드의 전체 덩어리를 복용하고 배치하려고 :for (int i = bullets.Count - 1; i >= 0; i--)
{
bullets[i].Update(delta);
//Bullets being destroyed upon leaving
if (bullets[i].position.Y < 0)
bullets.RemoveAt(i);
foreach (Enemy enemy in enemies)
foreach (Bullet bullet in bullets)
if (bullet.boundingBox.Intersects(enemy.boundingBox))
{
bullets.RemoveAt(i);
}
}
게임은이 시점에서 실행할 수 있지만 총알이 충돌하자마자 충돌합니다 적. 오류 "System.InvalidOperationException은"선 "foreach는 (총알 총알 총알)에서 발생합니다. 여기에서 어디로 가야
이솔직히 모르는, 그래서 어떤 도움에 감사드립니다.
이 코드는 한 줄을 지우면 작동하는 것처럼 보입니다. 'foreach (bullet bullet in bullets)'. 그것을 제거하고 그것이 원래 의도했던 것과 똑같이 실행되는지보십시오. – rileywhite