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