何时加载纹理?

时间:2010-10-08 03:44:23

标签: xna windows-phone-7 mobile-phones textures

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

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

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

1 个答案:

答案 0 :(得分:7)

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

默认内容管理器将自动为您重复处理已加载的对象。因此,您可以从多个地方Content.Load<Texture2D>("something"),并且您将始终返回相同的纹理实例。

因此,如果您的游戏对象有一堆类,标准设计为每个方法提供UpdateDraw方法,您可以从Game中的相应方法调用这些方法 - 只需向那些接受LoadContent参数的类添加另一个方法:ContentManager

您可以通过游戏的LoadContent方法调用该方法。

如果以后想要实现某种延迟加载系统(例如:在更改关卡时加载内容),您还可以从游戏中调用游戏类的LoadContent方法{{ 1}}方法(但请记住,加载内容很慢 - 所以你可能想要抛出一个“加载”屏幕。)

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

相关问题