在 C++ 中压缩代码时遇到问题 - SFML

Trouble condensing code in C++ - SFML

这听起来可能是个愚蠢的问题...

我有一段使用 SFML 库的 C++ 代码:

#include <SFML/Graphics.hpp>
#include <string>

void textDisplay(sf::Text& display_text, std::string display_str, sf::Font display_font, int char_size) {
    display_text.setString(display_str);
    display_text.setFont(display_font);
    display_text.setCharacterSize(char_size);
    display_text.setStyle(sf::Text::Regular);
}

int main() {
    sf::RenderWindow window(sf::VideoMode(400, 400), "Game");
    sf::Font arial;
    if (!arial.loadFromFile("fonts/arial/arial.ttf")) {
        return 0;
    }

    sf::Text text;
    textDisplay(text, "Hello, World!", arial, 30);

    sf::CircleShape shape(100.f, 10);
    shape.setFillColor(sf::Color::Yellow);

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

        window.clear();
        window.draw(text);
        window.display();
    }

    return 0;
}

因为当我尝试将文本显示到 SFML 屏幕上时,我将一遍又一遍地重复相同的四行代码,而不是重复代码,所以我创建了一个函数 (textDisplay) 接收四个参数(Text 对象本身、字符串、字体和字符大小)并为我初始化 Text 对象。

由于某种原因,文本没有显示 - 是不是我做错了什么?

一些东西:

如果错误与函数本身有关,您能否推荐一种替代方法来一遍又一遍地键入相同的四行代码?

找到了,您正在使用临时字体设置文本,因为它是一个普通变量而不是 reference/pointer:

void textDisplay(sf::Text& display_text, std::string display_str, sf::Font& display_font, int char_size) { //Just make it a reference and its done! :)
    display_text.setString(display_str);
    display_text.setFont(display_font);
    display_text.setCharacterSize(char_size);
    display_text.setStyle(sf::Text::Regular);
}