2013-01-05 236 views
1

我想製作一個定義遊戲關卡的類。它必須能夠訪問主遊戲課程使用的數據(紋理)。我該怎麼做?如何在類之間共享數據?

namespace xnagame 
{ 

class Level 
{ 
    blockTexture1, blockTexture2; 
    Content.RootDirectory = "Content"; 
    void LoadTextures() 
    { 
     blockTexture1 = Content.Load<Texture2D>("textures/block1"); 
     blockTexture2 = Content.Load<Texture2D>("textures/block2"); 
    } 
} 

下面是我的項目的圖片。我需要從類 「等級」 存儲在 「xnagameContent /紋理」 http://cs403723.userapi.com/v403723602/5635/Pq5jGApDYCU.jpg

+2

http://www.blackwasp.co.uk/csharpobjectoriented.aspx –

+0

尼斯鏈接LB,感謝分享。 –

+0

對於每個你想要的紋理來說,一個帶有get \ set屬性的靜態類可能是個好主意? –

回答

0

試試這個數據的存取....

主要方法:

Level level = new xnagame.Level(this.Content); 
level.LoadTextures(); 

定製級別等級:

namespace xnagame 
{ 
    public class Level 
    { 
     public Texture2D blockTexture1, 
     public Texture2D blockTexture2; 
     public ContentManager content; 

     public Level(ContentManager content) 
     { 
      this.content = content; 
     } 

     public void LoadTextures() 
     { 
      this.blockTexture1 = this.content.Load<Texture2D>("textures/block1"); 
      this.blockTexture2 = this.content.Load<Texture2D>("textures/block2"); 
     } 
    } 
} 
+0

也許這就是問題!我不知道我的參數類型應該是什麼類型。沒有「內容」這樣的類型。這是一個名字空間! – staroselskii

+0

更新了我的答案..可能不完美,但它應該引導你在正確的方向 – MacGyver

+0

你可能有更好的運氣發佈在http://gamedev.stackexchange.com ..他們有一個標籤爲「xna」 – MacGyver

1

聽起來像是一個理想的情況dependency injection。您可以在構造函數中傳遞對Content類的引用,或者將其作爲公共屬性,例如

public class Level 
{ 
    public Level(Content content) 
    { 
     Content = content; 
    } 

    public Content Content { get; set; } 
} 
0

我不是一個xna專家,但我認爲Xna ContentManager對象是可用的,如果你從遊戲派生你的課程。內容是Game類的一個屬性。請參閱http://msdn.microsoft.com/en-us/library/bb203875.aspx

如果要分開加載代碼並將其放入Level類中,您可以傳遞使用主遊戲類的Content屬性獲取的ContentManager實例。

+0

它'但是,它會使用許多我不想使用的資源。這很容易,因爲我唯一需要的就是訪問數據。 – staroselskii