由於這只是我的第二個遊戲,我仍然有點不確定如何不斷創建和使用對象的新實例。我知道在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