You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下CMake构建SFML项目图片无法显示问题求助

问题原因
  • SFML里的sf::Sprite不存储图像数据,只持有对sf::Texture的引用。你在Game类构造函数里定义的sf::Texture t是局部变量,构造函数执行完后这个纹理就会被销毁,此时Sprite引用的纹理已经不存在,自然没法渲染出图像。
  • 而在main.cpp渲染循环里创建sf::Texture t时,这个纹理的生命周期覆盖了window.draw(s)的执行过程,Sprite能正常拿到有效纹理数据,所以可以显示图片。
解决方法

把sf::Texture改成Game类的成员变量,让它的生命周期和Sprite保持一致,这样Sprite就能始终引用有效的纹理数据。

修改后的game.hpp代码:

class Game {
  public:
    sf::RenderWindow window;
    sf::Texture t; // 将Texture设为类成员变量
    sf::Sprite s;

    Game() {
        window.create({320, 480}, "hello");

        t.loadFromFile("images/tiles.png"); // 使用类成员Texture加载图片
        s.setTexture(t);
    }

    void handleInput() {}

    void update() {}

    void render() { window.draw(s); }
};

额外注意点:

  • 确认images/tiles.png路径正确:CMake编译后的可执行文件会从当前工作目录查找该路径,你可以通过CMake配置自动复制资源文件到输出目录,或者先使用绝对路径测试。
  • 加载纹理时可以添加失败判断,比如if (!t.loadFromFile("images/tiles.png")) { /* 这里写加载失败的处理逻辑,比如打印错误 */ },方便排查路径错误或文件损坏问题。

内容的提问来源于stack exchange,提问作者weiweiwei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:34:57