sfml - 图像无法显示

问题描述 投票:0回答:1

我在windows上用cmake创建了一个sfml项目,但是图像无法显示

顺便说一句,我是 c++ 和 sfml 的初学者,所以忽略代码风格,我只想它能工作。

src/main.cpp

#include "game.hpp"
#include <SFML/Graphics.hpp>

int main() {
    Game game;

    sf::Clock clock;
    sf::Time elapsed;
    float frametime = 1.0f / 60.0f;

    while (game.window.isOpen()) {
        sf::Event event;
        while (game.window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                game.window.close();
            }
        }

        // 1. 事件处理
        game.handleInput();

        // 2. 更新物理逻辑
        if (elapsed.asSeconds() >= frametime) {
            elapsed -= sf::seconds(frametime);
            game.update(); // 60次/秒
        }
        elapsed += clock.restart();

        // 3. 渲染
        game.window.clear();
        game.render();
        game.window.display();
    }
    return 0;
}

src/game.hpp

class Game {
  public:
    sf::RenderWindow window;

    sf::Sprite s;

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

        sf::Texture t;
        t.loadFromFile("images/tiles.png");
        s.setTexture(t);
    }

    void handleInput() {}

    void update() {}

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

但是如果我将绘制代码放入 main.cpp 中,它就可以工作,我不知道为什么。像这样:
src/main.cpp

       ...
        // 3. 渲染
        game.window.clear();
        // game.render();
        sf::Texture t;
        t.loadFromFile("images/tiles.png");

        sf::Sprite s(t);
        game.window.draw(s);
        game.window.display();
       ...

我想知道它是如何工作的

c++ cmake sfml
1个回答
0
投票

sfml 有一个关于此问题的常见问题解答 白方块问题

这是一个常见的错误。当你设置精灵的纹理时,所有的一切 内部的作用是存储一个指向纹理实例的指针。所以, 如果纹理被破坏或移动到内存中的其他位置,则精灵 最终得到一个无效的纹理指针。

您必须正确管理纹理的生命周期,并确保它们在被任何精灵使用时都有效。

您应该将您的

sf::Texture t
存储为班级成员,以便它与您的精灵具有相同的生命周期,并且您的精灵不会尝试绘制被破坏的纹理。

© www.soinside.com 2019 - 2024. All rights reserved.