创造无限产卵的敌人

时间:2012-02-27 15:33:20

标签: c# xna

由于这只是我的第二场比赛,我仍然不确定如何不断创建和使用新的对象实例。我知道在actionscript中有一种方法可以创建一个新的实例而不给它一个名字,然后遍历某种类型的列表。但我想知道使用xna在c#中执行此操作的最佳方法是什么。如果有人能提供一个简单的代码示例,我们将不胜感激。

由于

4 个答案:

答案 0 :(得分:2)

您是否正在寻找以下内容:

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

    }
}

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

答案 1 :(得分:1)

我并不特别了解XNA,但C#中有很多可以使用的集合。最有趣的是像List<MyObject>这样的通用类,它提供了强类型列表(即不需要强制转换)。其他选项包括ArraysDictionaries(如果你想给它们一些名字,但也希望能够轻松地遍历它们,或者如果你需要能够通过它们找到一个实例一些关键很快。)

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

示例代码(假设您有一个名为敌人的类):

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

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

您可以使用以下内容:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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