2013-02-03 3 views
0

대학에서 제 학기 1 과제물을위한 간단한 XNA 게임 개발. 그러나 적의 스프라이트에 대한 드로 루프가있는 벽을 조금 쳤습니다. 내가 알 수있는 한, 적의 모든 스프라이트가 game1.cs 클래스의 목록에 추가되지만 목록의 첫 번째 항목 만 그려집니다.여러 스프라이트를 그리는 XNA 루프가 작동하지 않습니다.

이 방법은 적의 인스턴스를 목록에 추가합니다. 업데이트 메서드에서 스폰가 1 초마다 증가합니다. 이것은 4 마리가 산란 될 때까지 적을 매초마다 순식히 산란시킵니다.

public void LoadEnemies() 
    { 
     int randX = rand.Next(0, 1000); 
     int randY = rand.Next(0, 500); 

     if (spawn >= 1) 
     { 
      spawn = 0; 

      if (enemyList.Count() < 4) 
      { 
       enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp1"), new Vector2(randX, randY))); 
       enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp2"), new Vector2(randX, randY))); 
       enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp3"), new Vector2(randX, randY))); 
       enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp4"), new Vector2(randX, randY))); 
      } 
     } 

     //Checks if enemies in the list have left the level bounds 
     for (int i = 0; i < enemyList.Count; i++) 
     { 
      if (!enemyList[i].isVisible) 
      { 
       enemyList.RemoveAt(i); 
       i--; 
      } 
     } 
    } 

그리기 방법

foreach (NM_Enemy enemy in enemyList) 
        { 
         enemy.Draw(gameTime, spriteBatch); 
        } 

업데이트 방법

foreach (NM_Enemy enemy in enemyList) 
       { 
        enemy.Update(gameTime); 
       } 
+0

수행 할 작업 : 디버거를 사용하십시오. Visual Studio를 사용하고 계신 것 같군, 그렇지? 줄을 두 번 클릭하여 중단 점을 설정합니다. 나는 내부에서 당신이 그릴 방법을 그리기 때문에리스트에있는 것이 무엇인지 그리고 어떤 순간에 그려지는 것을 볼 수 있습니다. 디버깅을 시작하려면 F5 (또는 맨 위에있는 디버그 버튼)을 누릅니다. –

답변

0

코드는 당신이 게시 한 및 프로그램의 설명을 정확히 일치하지 않는 니펫을. 당신은

적 매초마다 사까지가 를 양산하지만, 실제로 무슨 일이 일어나고 있는지보다 적은 네 원수가있는 경우, 네 번에 양산되는이되어 순차적으로 산란했다. 또한, 그들은 모두 (randX, randY)에 산란되고 있습니다. 그 사이에 rand.Next()을 부르지 마십시오. 정확히 4 개의 적을 똑같은 위치에 두었습니다. 이것은 왜 당신이 단지 하나만 보았는지를 설명 할 수 있습니다 - 그들은 모두 서로의 위에 있습니다. 이 라인

enemy.Draw(gameTime, spriteBatch); 

에 중단 점을 넣어 시도하고 적의 위치를보십시오. 아마 그들은 모두 같은 장소에있을 것입니다. 일부 수동 입력 값의 경우 enemyList.Add() 행에 randXrandY 값을 바꿔 가며 위치가 다르다는 것을 확신 할 수 있습니다. 그런 다음 그 위치를 볼 수 있습니다.

관련 문제