2013-02-03 34 views
0

为我在大学期间的第1学期任务开发一个简单的XNA游戏。不过,我已经为敌方精灵绘制了一圈墙。据我所知,所有敌方精灵都被添加到game1.cs类的列表中,但只有列表中的第一个被绘制。XNA循环绘制多个子画面不工作

此方法将敌人的实例添加到列表中。更新方法中,每秒产卵数正在增加。这会使敌人每秒产生一次,直到四次产卵。

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--; 
      } 
     } 
    } 

Draw方法

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(),这意味着你有四个敌人在完全相同的位置。这也许可以解释为什么你只看到一个 - 它们都在彼此之上。尝试把一个断点在此行

enemy.Draw(gameTime, spriteBatch); 

,并看看敌人的位置。你可能会发现他们都在同一个地方。可以肯定的是,在enemyList.Add()行中将randXrandY的值替换为一些手动输入的值,以确保它们的位置不同,然后查看它们的绘制位置。