好的,所以我之前问了一个关于我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
将纹理准备好在代码中的任何位置使用?
(如果此代码不足以回答我的问题,则顶部的链接会有很多,甚至更多。)