2014-10-31 1 views
1

적과 충돌 한 총알 사이에 boundingBoxes (Collision)을 만들려고합니다. 불행히도, 나는 적이 화면을 떠날 때마다 System.ArgumentOutOfRangeException 오류가 표시되거나 한 번에 두 개 이상의 탄환이 생성됩니다.여러 개의 경계 상자를 생성 할 때 오류 발생 "System.ArgumentOutOfRangeException"

모두 경계 상자와 같은 총알 & 적 클래스의 Update 기능에서 생성됩니다

boundingBox = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height); 

이 관련 코드입니다 내 Game1 업데이트 기능에 사용되는 :

for (int i = bullets.Count - 1; i >= 0; i--) 
       { 
        bullets[i].Update(gameTime); 

ERROR OCCURS HERE ->  if (bullets[i].boundingBox.Intersects(enemies[i].boundingBox)) 
          { 
           score += 1; 
           bullets.RemoveAt(i); 
          } 

        //Bullets being destroyed upon leaving 
        if (bullets[i].position.Y < 0) 
         bullets.RemoveAt(i); 
       } 

하나를 도움을 주시면 감사하겠습니다. 여기에 또한

, 즉 전혀 도움이된다면? 내가 추측해야하는 경우, 오류가 if (bullets[i].boundingBox.Intersects(enemies[i].boundingBox)) 문에서 제공

List<Bullet> bullets = new List<Bullet>(); 

    public void Shoot (Vector2 pos, Vector2 dir, float speed) 
    { 
     Bullet bullet = new Bullet(bulletTexture); 

     bullet.position  = pos; 
     bullet.direction = dir; 
     bullet.speed  = speed; 

     if (bullets.Count() < 40)  //Maximum amount of bullets 
      bullets.Add(bullet); 
    } 
+0

그리고이 예외가 정확히 어디에서 발생합니까? – Dirk

+0

내 사과, 코드의 두 번째 블록에서 다섯 번째 줄에 오류가 발생합니다 : - "(총알 [나는] .boundingBox.Intersects (enemies [i] .boundingBox)))" – Paulie

+0

그건 내가 생각한거야,이 줄 때 서면 언어로 번역하는 것은 의미가 있습니까? i 번째 총알이 i 번째 적과 맞았는지 확인하고 있습니다. 다른 것을 공격 할 수 없습니까? – Dirk

답변

0

나는 Game1 클래스로 글 머리 기호 목록을 구현하는 방법이다.

기본적으로 같은 양의 적과 총알을 항상 갖고 있습니까? 그렇지 않으면 숫자가 다를 때마다 실패합니다.

왜 이런가요? 자, 두 개의 다른 콜렉션 인 bulletsenemies을 사용하고 있으며, 위치는 i입니다.

그래서 당신은 5 개 총알하지만 컬렉션에 단 1 적이있는 경우, 대한의 첫 번째 반복 i = 4을 것이라고 enemies 수집에 존재하지 않는 위치 (그것은 단지 enemies[0] 위치를 차지하고있다). 문제를 해결하기

한 가지 방법은 다음과 같습니다

foreach (enemy in enemies) 
    foreach (bullet in bullets) 
     if (bullet.boundingBox.Intersects(enemy.boundingBox)) 
     { 
      // do your logic here. 
     } 

당신은 모든 적군을 통해 이동하고 총알이 교차하는 경우 각각에 대해 당신이 확인. 이것은 현명한 최상의 솔루션 성능은 아니지만 좋은 시작이라고 생각합니다.

+1

고맙습니다. 나는 이것을 이해한다! – Paulie

관련 문제