无法在C ++中压缩代码 - SFML

时间:2016-10-25 06:21:33

标签: c++ sfml

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

我在C ++中有这段代码,它使用SFML库:

#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屏幕上而不是重复代码时,我会一遍又一遍地重复相同的四行代码,因此我创建了一个函数({{ 1}})它接受四个参数(textDisplay对象本身,一个字符串,一个字体和字符大小)并为我初始化Text对象。

出于某种原因,文字没有显示 - 有什么我做错了吗?

有些东西:

  • 该窗口名为Text
  • 编译时没有错误,所以我不知道错误在哪里。
  • 董事会本身只是黑色,window上没有任何文字。

如果错误与函数本身有关,你能否建议一遍又一遍地输入相同的四行?

1 个答案:

答案 0 :(得分:2)

找到它,你用临时字体设置文本,因为它是一个普通变量,而不是一个引用/指针:

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);
}