首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数角度看ID到文件路径的内部和外部映射

问从函数角度看ID到文件路径的内部和外部映射
EN

Stack Overflow用户
提问于 2020-07-10 17:03:34
回答 1查看 91关注 0票数 0

sf::Sprite可以与多个sf::Sprite对象共享相同的sf::Sprite对象,因此我希望设计一个纹理管理器,使其不多次使用相同的纹理。

我使用一个标识符来引用纹理。TextureID将纹理映射到与包含该纹理的文件对应的文件路径:

代码语言:javascript
复制
std::filesystem::path mapIdToFilepath(TextureID id);

在TextureManager中,我希望有一个成员函数loadTexture(),我想:

拥有

  1. 的loadTexture()接受TextureID:

sf::织构及纺织经理::装载机(TextureID id);

函数随后必须在内部通过调用mapIdToFilepath().将标识符TextureID转换为纹理文件路径。

  1. 或接受纹理的文件路径作为参数:

sf::织构& TextureManager::loadTexture(std::filesystem::path薄膜);

调用此函数的客户端代码必须将标识符TextureID转换为纹理文件路径。但是,这个函数不需要知道mapIdToFilepath的存在,因为映射是externally.完成的

我认为第一种方法更方便,但它将TextureManager耦合到mapIdToFilepath(),因为它在内部执行TextureID文件路径转换。

从体系结构的角度来看,在考虑这两种不同的方法时应该记住哪些方面?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 07:12:47

我猜想,在一个广泛的方面,您正在寻找类似于资产管理器的东西来加载您的资产(无论是纹理、声音还是字体),并在任何地方使用它们。你可以用我很久以前用过的东西。创建一个Asset类,它将在地图中包含您的纹理。就像这样:

代码语言:javascript
复制
class TexManager
{
public:

    TexManager* tex()  //to access your assets without creating multiple instances of this class
    {
         static Texmanager texMan;
         return &texMan;
    }

    void loadTexture(std::string name, std::string filepath) //to load textures
    { 
         sf::Texture tmp;
         tmp.loadFromFile(filepath);
         texMap.insert(std::make_pair(name, tmp));
    }

    sf::Texture& getTexture(st::string name) //to retrieve textures
    { 
         return texMap.at(name);
    }

private:
    std::map<std::string, sf::Texture> texMap;
}

不要像现在这样使用代码,因为您需要为失败的加载或映射的不正确的键值添加条件。如果你需要别的东西,或者我回答得不对,请告诉我。谢谢。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62839108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档