2012-11-03 3 views
0

여기 내 게임을 계속합니다 (플레이어가 우주선이고 유성을 격추시키는 게임). 나는 현재 총탄을 쏘는 중입니다. 총알이 부딪히면 유성을 제거하려고합니다. 그래서 여기에 내가 한 일이 있습니다. 거의 다 왔지만 코딩에 오류가 있음을 발견했습니다. 내 게임에서는지도의 오른쪽 바깥쪽에 유성이 생기고 왼쪽으로 이동하여 요점을 쏴 버리는 것이지만 유성우를 옳은 순서로 쏘지 만 그렇지 않으면 효과가 있습니다. 제가 그림으로 설명해 드리겠습니다. 내가 두 번째 유성을 촬영한다면 ExampleXNA 2D Bulletcollision (목록이있는 목록)

, 숫자 1로 표시된 유성 처음

//spawns the enemies. 
public void LoadEnemies() 
    { 
     int randY = random.Next(100, 500); 
     if (spawn > 1) 
     { 
      spawn = 0; 
      if (enemies.Count() < 4) 
       enemies.Add(new Enemies(Content.Load<Texture2D>("meteor"), new Vector2(1110, randY))); 
     } 
     //Here's where the error lies because of the bulletcolliding (I think) 
     for (int i = 0; i < enemies.Count; i++) 
     { 
      if (!enemies[i].isVisible || bulletColliding) 
      { 
       bulletColliding = false; 
       enemies.RemoveAt(i); 
       i--; 
      } 
     } 
    } 

충돌 방법을 파괴 얻을 것입니다.

 public void bulletCollision(GameTime gameTime) 
    { 
     foreach (var x in bullets) 
     { 
      foreach (var y in enemies) 
      { 
       enemy_rect = new Rectangle((int)y.position.X, (int)y.position.Y, 10, 10); 
       bullet_rect = new Rectangle((int)x.position.X, (int)x.position.Y, 10, 10); 
       if (bullet_rect.Intersects(enemy_rect)) 
       { 
        bulletColliding = true; 
       } 
      } 
     } 
    } 

기본적으로, 나는 타격을 입는 특정 유성을 제거하는 방법에 대해 우둔합니다. 나는 당신의 도움이 필요합니다. 나는 내가 얻는 모든 도움을 Appreaciate.

답변

5

bool bulletColliding 만 사용하면 안됩니다. 파괴해야 할 적의 수를 나타내는 정수도 사용하십시오. 각 적군에는 그의 수에 대한 정보가 있습니다.

두 번째 옵션은 처음에는 false가 될 bool ifDestroy을 계속 유지할 수 있으며 적을 없애려면 true로 변경합니다. loadEnemies()에서 확인할 수 있습니다.

+0

도움을 주셔서 감사합니다. 나는 스스로 해결할 수는 없지만, 이와 같은 것으로 상상하고있었습니다. 내가 실패하면 더 많은 정보를 가지고 돌아올거야. – user1775668

2

기본적으로 이것은 Sabrina Le의 답변에 대한 추가 설명입니다.

...

당신은

public void bulletCollision(GameTime gameTime) 
{ 
    foreach (var x in bullets) 
    { 
     foreach (var y in enemies) 
     { 
      enemy_rect = new Rectangle((int)y.position.X, (int)y.position.Y, 10, 10); 
      bullet_rect = new Rectangle((int)x.position.X, (int)x.position.Y, 10, 10); 
      if (bullet_rect.Intersects(enemy_rect)) 
      { 
       y.bulletColliding = true; 
      } 
     } 
    } 
} 

... 적을 부울이 bulletColliding라고하고 충돌 코드가 비슷한 제품을 더 보일 것 가지고 자신을 개체를 원하는 다음 적 로딩 코드가 비슷한 제품을 더 볼 것

//spawns the enemies. 
public void LoadEnemies() 
{ 
    int randY = random.Next(100, 500); 
    if (spawn > 1) 
    { 
     spawn = 0; 
     if (enemies.Count() < 4) 
      enemies.Add(new Enemies(Content.Load<Texture2D>("meteor"), new Vector2(1110, randY))); 
    } 
    //Here's where the error lies because of the bulletcolliding (I think) 
    for (int i = 0; i < enemies.Count; i++) 
    { 
     if (!enemies[i].isVisible || enemies[i].bulletColliding) 
     { 
      enemies[i].bulletColliding = false; 
      enemies.RemoveAt(i); 
      i--; 
     } 
    } 
} 

단일 한 bulletColliding 변수를 엄격히 사용하면 유성이 충돌했을 때 true가 설정됩니다. 따라서 메소드가 유성을 순차적으로 확인하면 bulletColliding이 첫 번째 객체를 검사하고 if 내부의 코드가 실행될 때에도 true로 설정됩니다. 적의 특정 부울을 사용하면 어떤 적이 맞았는지 알려주고 이에 따라 제거됩니다.

+0

대단히 감사합니다. 모두 정렬되었습니다. – user1775668