2012-02-27 90 views
1

由于这只是我的第二个游戏,我仍然有点不确定如何不断创建和使用对象的新实例。我知道在actionscript中有一种方法可以创建一个新的实例,而不用给它一个名字,然后通过某种列表循环。但我想知道在c#中使用xna做到这一点的最好方法是什么。如果任何人都可以提供一个简单的代码示例,将不胜感激。创建无限产卵的敌人

感谢

+1

使用“new”关键字实例化时出现了什么问题? – Fantius 2012-02-27 15:34:58

+0

@Fantius我认为他的意思是把它放在一个列表中以后使用,而不是将它分配给一个特定的变量。 – crashmstr 2012-02-27 15:37:54

+0

我知道你使用“new”来创建一个新的实例/分配内存,但是因为我习惯于用我给它们创建的名称创建一些对象,所以我并不完全知道如何创建并管理无限量的对象。 – Sam 2012-02-27 15:38:07

回答

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(新的敌人(I))的实例,并增加了一个敌人的名单,而不将其分配给指定的变量 - 我认为你在问什么。

1

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

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

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

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

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

您可以使用它是这样的:

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

XNA通过调用更新,并不断绘制提供了一个无限的游戏循环。正如克里斯所说,把你的对象放在一个列表中,每次你需要添加一个新对象时,在Update方法中实例化它。然后让Update和Draw方法遍历列表并分别调用每个对象的Update和Draw方法。