所以我知道在构造函数调用上加载内容是不好的,但是可以从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");
可以吗?或者处理需要加载的多个内容的最佳方法是什么?
答案 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
会将所有屏幕内容从内存中删除。