我目前正在开发几个 Windows手机项目(虽然这个问题也可能适合iphone / android)但它让我思考,何时是从内容管理器加载纹理的最佳时机. 起初,我从我的游戏基类中加载它们,然后根据需要传递
起初,我从我的游戏基类中加载它们,然后根据需要传递它们.很快就厌倦了这一点,我创建了一个小型资源管理器类,我将其传递给任何需要它的东西.
所以我想,也许最好的是我实际加载纹理,当一个类需要它,然后将它分配给一个变量,所以当我再次需要它时 – 它将全部准备好了…是这是处理加载资源的最佳方式(高效?,最快?)?如果没有,你会怎么推荐我去做?
不要创建任何类型的“资源管理器”类.只需传递XNA ContentManager类(从Game.Content获取的实例).默认内容管理器将自动处理重用加载的对象.因此,您可以从多个位置使用Content.Load< Texture2D>(“something”),并且您将始终返回相同的纹理实例.
因此,如果你有一堆游戏对象的类,标准设计给每个你从Game中相应方法调用的Update和Draw方法 – 只需添加另一个方法:LoadContent到那些接受参数的类ContentManager.
您可以从游戏的LoadContent方法中调用该方法.
如果以后想要实现某种延迟加载系统(例如:在更改级别时加载内容),您还可以从游戏的Update方法中调用游戏类的LoadContent方法(但请记住加载内容很慢 – 所以你可能想要抛出一个“加载”屏幕.
卸载内容有点棘手.你自己创建的任何东西都必须卸载.但是,从ContentManager加载的任何内容(因为实例都是共享的)只能由该内容管理器卸载(游戏将在需要时处理卸载其内容成员).你可能会发现this blog post值得一读.