制造无限繁殖的敌人

本文关键字:敌人 繁殖 无限 制造 | 更新日期: 2023-09-27 18:26:00

由于这只是我的第二个游戏,我仍然有点不确定如何不断创建和使用对象的新实例。我知道在actionscript中,有一种方法可以创建一个新的实例,而不给它一个名称,然后循环遍历某种列表。但我想知道在c#中使用xna做这件事的最佳方法是什么。如果有人能提供一个简单的代码示例,我们将不胜感激。

感谢

制造无限繁殖的敌人

您正在寻找以下内容吗:

// A sample enemy class
class Enemy
{
    public int EnemyStrength { get; set; }
    public Enemy(int strength)
    {
        EnemyStrength = strength;
    }
}
class Program
{
    static void Main(string[] args)
    {
        // A List to hold all the enemies
        List<Enemy> Enemies = new List<Enemy>();
        // Create some enemies
        for (int i = 0; i < 5; i++)
        {
            Enemies.Add(new Enemy(i));
        }
        // Display the strength of them all.
        foreach (Enemy enemy in Enemies)
        {
            Console.WriteLine(enemy.EnemyStrength);
        }
    }
}

重要的一点是敌人。添加(new Enemy(i)),它实例化并将敌人添加到列表中,而不将其分配给命名变量——我认为这就是你所要求的。

我不知道XNA的具体情况,但C#中有很多集合可以使用。最有趣的是像List<MyObject>这样的通用列表,它提供了一个强类型列表(即不需要强制转换)。其他选项包括数组、字典(如果你想给它们一些名称,但也希望能够轻松地循环使用它们,或者如果你需要能够通过某个键快速找到单个实例)。

还有很多其他的,但这些都是最常见的。

示例代码(假设你有一个被称为敌人的类):

List<Enemy> myList = new List<Enemy>();
for (int i = 0; i < 100; i++)
{
        myList.Add(new Enemy());
}

显然,这不会产生无限的敌人,但它展示了如何将一堆新的未命名对象添加到一个简单的列表中。

你可以这样使用它:

foreach (Enemy badguy in myList)
{
    badguy.Update();
}

XNA通过不断调用Update和Draw提供了一个无限的游戏循环。正如Chris所说,将对象保存在一个列表中,每次需要添加新对象时,请在Update方法中实例化它。然后让Update和Draw方法遍历列表,并分别调用每个对象的Update和Draws方法。

使用http://en.wikipedia.org/wiki/Flyweight_pattern这是一个良好的开端,因为它将节省资源。