2012-02-27 88 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方法。