我正在使用SFML 2.3来构建游戏,我有一个非常奇怪的问题。我有两个不同的纹理文件,都是.png,但其中一个拒绝绘制。
我没有收到任何错误消息。由于某种原因,TextureA工作并且看起来很好但是TextureB不能绘制。
我确保代码是正确的,检查了大写,我在同一个文件夹中,并尝试了一切。 我甚至尝试输入TextureA代替TextureB,而TextureA绘制得很好。我认为问题可能出在.png文件本身,但我无法弄清楚它是什么。
提前致谢!
答案 0 :(得分:2)
有纹理和SFML的捕捉。精灵假设他们不是纹理资源的所有者。这样,您必须确保在尝试绘制时纹理仍然存在。请看这里的代码:
sf::Sprite makeSprite() {
sf::Texture tex;
tex.loadFromFile("someTexture.png");
sf::Sprite sprite;
sprite.setTexture(tex);
// You indeed return the sprite, but tex is going out of scope here.
return sprite;
}
// further code will draw the sprite as a white square.
相反,尝试将纹理保留在加载纹理列表中。你可以在某个地方保留一个向量,或者只是将你的纹理作为静态变量放在函数makeSprite
中。我强烈建议不使用静态或全局变量,因为它们是设计缺陷的第一个迹象,但它仍然是一个有效的解决方案。