由于这只是我的第二个游戏,我仍然有点不确定如何不断创建和使用对象的新实例。我知道在actionscript中有一种方法可以创建一个新的实例,而不用给它一个名字,然后通过某种列表循环。但我想知道在c#中使用xna做到这一点的最好方法是什么。如果任何人都可以提供一个简单的代码示例,将不胜感激。创建无限产卵的敌人
感谢
由于这只是我的第二个游戏,我仍然有点不确定如何不断创建和使用对象的新实例。我知道在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);
}
}
}
最重要的一点是Enemies.Add(新的敌人(I))的实例,并增加了一个敌人的名单,而不将其分配给指定的变量 - 我认为你在问什么。
我不知道具体的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();
}
XNA通过调用更新,并不断绘制提供了一个无限的游戏循环。正如克里斯所说,把你的对象放在一个列表中,每次你需要添加一个新对象时,在Update方法中实例化它。然后让Update和Draw方法遍历列表并分别调用每个对象的Update和Draw方法。
使用http://en.wikipedia.org/wiki/Flyweight_pattern是一个好的开始,因为它会节约资源。
使用“new”关键字实例化时出现了什么问题? – Fantius 2012-02-27 15:34:58
@Fantius我认为他的意思是把它放在一个列表中以后使用,而不是将它分配给一个特定的变量。 – crashmstr 2012-02-27 15:37:54
我知道你使用“new”来创建一个新的实例/分配内存,但是因为我习惯于用我给它们创建的名称创建一些对象,所以我并不完全知道如何创建并管理无限量的对象。 – Sam 2012-02-27 15:38:07