使用SFML构建游戏并且纹理拒绝绘制

时间:2016-09-14 19:26:30

标签: c++ c++11 visual-c++ textures sfml

我正在使用SFML 2.3来构建游戏,我有一个非常奇怪的问题。我有两个不同的纹理文件,都是.png,但其中一个拒绝绘制。

我没有收到任何错误消息。由于某种原因,TextureA工作并且看起来很好但是TextureB不能绘制。

我确保代码是正确的,检查了大写,我在同一个文件夹中,并尝试了一切。 我甚至尝试输入TextureA代替TextureB,而TextureA绘制得很好。我认为问题可能出在.png文件本身,但我无法弄清楚它是什么。

提前致谢!

1 个答案:

答案 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中。我强烈建议使用静态或全局变量,因为它们是设计缺陷的第一个迹象,但它仍然是一个有效的解决方案。