在LoadContent()方法/函数中处理多个内容的好方法是什么

时间:2012-03-15 18:32:09

标签: c# xna xna-4.0

所以我知道在构造函数调用上加载内容是不好的,但是可以从LoadContent()为类调用.load函数吗? 离。

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

在.load中我会Texture2D playerT = Content.Load<Texture2D>("player");

可以吗?或者处理需要加载的多个内容的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

在构造函数调用中加载内容的问题是,您可能希望有时卸载内容以节省内存,但保留类的实例,只需调用load即可再次使用该类; )。因此,在Game类初始化之后的任何时间加载都很好,并且应该基于何时需要内容而不是设计约定来完成。

所以任何时候过Game.Init都没关系。如果玩家类需要内容,那么在LoadContent()内部调用load是最好的选择。

答案 1 :(得分:2)

关于“多重内容”:

Game类的子类继承了一个名为ContentManager的{​​{1}}对象。

但是,您不仅限于这一个Content对象(实际上您甚至根本不需要使用它)。您可以根据需要制作任意数量,并将它们放在任何您想要的地方。这是处理不同“屏幕”等不同内容的一种方法,这样您就可以加载和卸载所需的部分。

要在不同的屏幕中设置不同的内容管理器,您可以执行以下操作:

在某个类的某个类中,创建一个变量:

ContentManager

然后按如下方式初始化:

ContentManager moreContent;

您必须将moreContent = new ContentManager(game.Services); moreContent.RootDirectory = game.Content.RootDirectory; 对象传递到类中才能正确初始化它。这将使此内容管理器与父Game具有相同的根文件夹。当然,您可以将其更改为您喜欢的任何内容。

现在仅针对此屏幕,您可以执行以下操作:

Game.Content

然后如果切换屏幕(在Texture2D playerT = moreContent.Load<Texture2D>("player"); 上):

Update

会将所有屏幕内容从内存中删除。

相关问题