首页 > 解决方案 > SFML 绘图文本导致崩溃?

问题描述

   #include <SFML/Graphics.hpp>

int main(){
    sf::RenderWindow app(sf::VideoMode(800, 600), "SFML window");

    sf::Text test;
    test.setString("Hello world");
    sf::Font font;
    font.loadFromFile("Monospace.ttf");
    test.setFont(font);

    // Start the game loop
    while (app.isOpen())
    {
        // Process events
        sf::Event event;
        while (app.pollEvent(event))
        {
            // Close window : exit
            if (event.type == sf::Event::Closed)
                app.close();
        }

        // Clear screen
        app.clear();

        // Draw the sprite
        app.draw(test);

        // Update the window
        app.display();
    }

    return EXIT_SUCCESS;
}

这只是我整理的一个简单示例。无论如何,这应该可以正常工作。但由于某种原因,我每次都会崩溃。如果我注释掉 setFont,就没有崩溃。如果我注释掉平局,则不会发生崩溃。

运行调试给我以下错误:

"Program received signal SIGSEGV, Segmentation fault.
In ?? () (C:\Windows\SysWOW64\ig4icd32.dll)"

我很感激任何关于为什么会发生这种情况的想法。

标签: c++sfml

解决方案


我的钱花在字体加载上。虽然它对我来说没有崩溃,但它没有成功加载字体,所以至少:

if (font.loadFromFile(FONTDIR "Monospace.ttf"))
    test.setFont(font);

就我而言,我必须为其提供完整的路径才能使其工作:

if (font.loadFromFile(FONTDIR "Monospace.ttf")
 || font.loadFromFile(FONTDIR "liberation/LiberationMono-Regular.ttf"))
{
    test.setFont(font);
}

我在我的系统上#define FONTDIR 的地方:

#define FONTDIR "/usr/share/fonts/truetype/"

现在它成功了:

在此处输入图像描述


推荐阅读