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

Building a game with SFML and texture refuses to draw

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

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

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

提前致谢!

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