0

为我在大学的第一学期作业开发一个简单的 XNA 游戏。然而,我在敌人精灵的绘制循环中遇到了一些障碍。据我所知,所有的敌人精灵都被添加到 game1.cs 类的列表中,但只有列表中的第一个被绘制。

此方法将敌人的实例添加到列表中。Spawn 在更新方法中每秒递增。这使得敌人每秒按顺序生成,直到生成了四个。

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

1 回答 1

0

您发布的代码片段与您的程序描述不完全匹配。你之前这么说

敌人每秒按顺序产生,直到产生四个,但实际上发生的情况是,如果敌人少于四个,则同时产生四个。此外,它们都是在(randX, randY)没有你打电话rand.Next()的情况下产生的,这意味着你有四个敌人在完全相同的位置。这可以解释为什么你只看到一个 - 它们都在彼此之上。尝试在这一行设置断点

enemy.Draw(gameTime, spriteBatch);

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

于 2013-02-05T09:01:26.423 回答