C ++为什么全局静态类不将其信息保存在其他类中?

时间:2014-08-01 18:13:06

标签: c++ class abstract-class sfml

好的,所以我之前问了一个关于我this code的问题,但没有人给出任何建议(可能因为我无法给出一个更准确的区域来关注),所以我继续我的测试并将问题精确定位到更精确的区域。 (如果由于某种原因缺少某些内容,那个链接将显示我的大部分代码。)

基本上,我有一个全局静态类static sf::Texture PlayerTexture,它保留一个纹理,以便任何和所有精灵都可以指向它的纹理。我有一个函数void SetUp(),然后在其信息中加载所有纹理以供使用。我在int main()的开头使用这个函数,这样这些全局静态纹理都将准备好它们的纹理。但是,当我创建一个具有精灵的新对象将其纹理设置为PlayerTexture时,纹理不会被加载,除非我在构造函数中使用SetUp()函数。

代码:

//rpg.h
static sf::Texture PlayerTexture;

/*
    NOTE: --Loads in All Textures for use
*/
static void SetUp()
{
    //Load texture.
    if(!PlayerTexture.loadFromFile("C:/Program Files (x86)/Terentia/Files/Textures/player.png"))
    {
        std::cout<<"Error: texture failed to load..."<<std::endl;
    }
}

...

//main.cpp
typedef std::shared_ptr<rpg::GameObject> ptrGameObject;

int main()
{
    //Should prepare all textures for use...
    rpg::SetUp();

    sf::Sprite tempSprite;

    //Texture is loaded from rpg::SetUp() and works.
    tempSprite.setTexture(rpg::PlayerTexture);

    //Unless rpg::SetUp()  is called in constructor, the texture will be empty.
    //Even though rpg::SetUp() is called before object is created.
    ptrGameObject player = rpg::CreatePlayer();
}

那么为什么static sf::Texture PlayerTexture不能保持其纹理在其他类中使用呢?我如何设置它以便PlayerTexture将纹理准备好在代码中的任何位置使用?

(如果此代码不足以回答我的问题,则顶部的链接会有很多,甚至更多。)

0 个答案:

没有答案