【问题标题】:When to load textures?何时加载纹理?
【发布时间】:2010-10-08 03:44:23
【问题描述】:

我目前正在处理几个 windows phone 项目(虽然这个问题也可能适合 iphone/android),这让我开始思考,什么时候是从内容管理器加载纹理的最佳时间。

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

所以我在想,当一个类需要它时,我实际上加载纹理,然后将它分配给一个变量,所以当我再次需要它时,它可能已经准备好了。 ..这是处理加载资源的最佳方式(高效?最快?)?如果没有,你会建议我怎么做?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    如果以后你想实现某种延迟加载事物的系统(例如:改变关卡时加载内容),你也可以从你游戏的Update方法中调用你游戏类的LoadContent方法(但请记住,加载内容很慢 - 因此您可能想弹出一个“加载”屏幕)。

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

    【讨论】:

    • 传递 contentManager 类会比调用 GameState.Instance.LoadTexture2D("Texture") 更好吗?
    • 我认为 GameState 是单例是否正确?这并不可怕,但我发现从长远来看,传递 ContentManager 会更加灵活。另外,我什至不会为单例而烦恼-如果您想走那条路-只需将其设为public static 并在您的 Game 类中对其进行初始化即可。 (这是我的游戏开发答案——正确的软件工程答案很简单:“是的!”)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多