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