2013-11-21 54 views
0

參與敵對階級:字典Stack類類型一起

public abstract Enemy : MonoBehaviour {} 

public class A : Enemy {} 

public class B : Enemy {} 

我有一本字典。我想讓字典爲每種類型的敵人都包含一個堆棧。

public class Test : MonoBehaviour 
    { 
     // prefabs 
     public GameObject a, b; 

     public Dictionary<Enemy, Stack> eDictionary; 

     void Start() 
     { 
      eDictionary = new Dictionary<Enemy, Stack>(); 
      Fill(a, 10); 
      Fill(b, 10); 
     } 
    } 

我如何製作堆棧和鍵。

public void Fill(Enemy e, int howMany) 
{ 
    Stack s = new Stack(); 
    for(int I = 0; I < howMany; I++) 
    { 
     GameObject g = MonoBehavior.Instantiate(e.gameObject) as GameObject; 
     s.Push(g); 
    } 

    eDictionary.Add(e, s) 
} 

的主要問題是:如何讓我以這樣的方式即A型的敵人1個鍵堆疊在一起的鑰匙?

當我進入generalized敵人的甲類和乙類,並試圖將敵人加入到相應的堆棧中,因爲它的鍵,我得到的鍵不匹配錯誤。當我將敵人從堆棧中彈出時,我會這樣做,然後當我完成它們時,我想將它們推入字典的堆棧中(它在此時失敗)。

+0

爲什麼不使用'堆棧'? – Dai

+0

我會有不同的敵人。所以我想爲每一種敵人提供一個堆棧。除非你的意思是給字典中的Stack提供一個類型,否則就不需要了。 –

+0

@MikeJohn好像你把'Enemy'類型與'Enemy'的*實例*混淆了。嘗試使用字符串或Enum(例如'enum EnemyType')代替鍵。或者可能使用'typeof(Enenemy)'作爲關鍵。 –

回答

4

我認爲這個問題可能與您使用的密鑰有關。

當你將堆棧添加到字典中時,你會給它一個敵人實例的關鍵字。所以,即使你以後用相同的類型引用該字典,它也將是一個不同的實例,所以它不會匹配。

一個解決方案是使用類的名稱作爲鍵,而不是對象本身。

看到這個答案: https://stackoverflow.com/a/179711/1514883

+0

這並不能真正回答我的問題,但我會接受它並問我的問題,因爲我知道問題所在。 –