何时加载纹理?

Tim*_*Tim 3 xna textures mobile-phones windows-phone-7

我目前正在开发几个Windows手机项目(虽然这个问题也可能适合iphone/android)但它让我思考,什么时候是从内容管理器加载纹理的最佳时机.

起初,我从我的游戏基类中加载它们,然后根据需要传递它们.很快就厌倦了这一点,我创建了一个小型资源管理器类,我将其传递给任何需要它的东西.

所以我想,也许最好的是我实际加载纹理,当一个类需要它,然后将它分配给一个变量,所以当我再次需要它时 - 它将全部准备好了...是这是处理加载资源的最佳方式(高效?,最快?)?如果没有,你会怎么推荐我去做?

And*_*ell 7

不要创建任何类型的"资源管理器"类.只需传递XNA ContentManager类(您获得的实例Game.Content).

默认内容管理器将自动处理重用加载的对象.所以你可以Content.Load<Texture2D>("something")从多个地方获得相同的纹理实例.

因此,如果你有一堆游戏对象的类,使用标准设计给每个Update和一个Draw你从相应的方法调用的方法Game- 只需添加另一个方法:LoadContent到那些接受参数的类ContentManager.

您可以从游戏的LoadContent方法中调用该方法.

如果以后想要实现某种延迟加载系统(例如:在更改级别时加载内容),您还可以LoadContent从游戏Update方法中调用游戏类的方法(但请记住,加载内容是慢 - 所以你可能想要抛出一个"加载"屏幕).

卸载内容有点棘手.你自己创建的任何东西都必须卸载.但是,从ContentManager(因为实例是共享的)加载的任何内容都应该只由内容管理器Game卸载(将Content在需要时处理卸载其成员).您可能会发现此博客文章值得一读.