由于这只是我的第二个游戏,我仍然有点不确定如何不断创建和使用对象的新实例。我知道在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这是一个良好的开端,因为它将节省资源。