2012-03-15 20 views
0

因此,我知道在構造函數調用中加載內容是不好的,但是可以從LoadContent中爲類調用.load函數()? ex。什麼是在LoadContent()方法/函數中處理加載多個內容的好方法

protected override void LoadContent() 
{ 
    spriteBatch = new SpriteBatch(GraphicsDevice); 
    viewport = graphics.GraphicsDevice.Viewport; 
    player1.load(spriteBatch, Content); 
} 

內.load我會Texture2D playerT = Content.Load<Texture2D>("player");

可以嗎?或者處理需要加載的多個內容的最佳方式是什麼?

回答

1

加載構造函數調用中的東西的問題是,您可能希望有時卸載內容以節省內存,但圍繞該類保留類的實例,只需調用load ()。因此,在Game類初始化之後的任何時候加載都是很好的,並且應該根據何時需要內容而不是設計慣例來完成。

所以任何時候過去Game.Init都很好。如果玩家類需要內容,那麼在LoadContent()內調用load是做這件事的最好的地方。

+0

謝謝,我不確定以後是否可以加載內容。大部分的例子和tutoral似乎都想讓你在開始時加載所有的東西。如果稍後調用它應該從更新中調用,我猜? – RustyH 2012-03-15 19:35:27

1

關於 「多內容」:

Game類的子類繼承了稱爲Content一個ContentManager對象。

但是,您不僅僅限於這一個ContentManager對象(實際上您甚至不必使用它)。您可以根據需要製作任意數量,並將其放在您想要的任何地方。這是處理不同「屏幕」等不同內容的一種方式,以便您可以加載和卸載需要的部分。

要設置不同的內容管理器在不同的屏幕上,你可以做到以下幾點:

在一類的地方,做一個變量:

ContentManager moreContent; 

對其進行初始化喜歡如下:

moreContent = new ContentManager(game.Services); 
moreContent.RootDirectory = game.Content.RootDirectory; 

您必須將您的Game對象傳遞到類中才能正確初始化它。這將使此內容管理器與父項Game.Content具有相同的根文件夾。當然,你可以把它改成你喜歡的任何東西。

現在只有這個屏幕,你可以做的東西,如:

Texture2D playerT = moreContent.Load<Texture2D>("player"); 

,然後如果你切換屏幕(上Update):

moreContent.Unload(); 

將採取所有屏幕的內容了內存。

+0

謝謝,非常好的信息知道。 – RustyH 2012-04-16 23:54:04

+0

非常有用和信息豐富。 – metabuddy 2018-02-14 21:55:35

相關問題