2016-10-25 3 views
0

Это, вероятно, будет звучать как глупый вопрос ...Проблема конденсации код в 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, вместо того, чтобы повторять код, я создал функцию (textDisplay), которая принимает четыре аргумента (сам объект Text, строка, шрифт и размер символа) и инициализирует Text объект для меня.

По какой-то причине текст не отображается - есть ли что-то, что я делаю неправильно?

Некоторые вещи:

  • окно называется window.
  • При компиляции ошибок нет, поэтому я понятия не имею, где ошибка.
  • Плата сама по себе только черная, там нет текста на window.

Если ошибка связана с самой функцией, вы можете порекомендовать альтернативу повторять одно и то же четыре строки снова и снова?

+0

ли переворачивать/представить буфер после рисования вы? –

+0

@ IvanRubinson Да, я сделал - держись, я поставлю его в фрагмент. –

+0

@IvanRubinson Yup, понял. –

ответ

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

Ну, это работает! Благодаря! –

+0

Это общая ошибка с SFML;), будьте осторожны с формами – Treycos

Смежные вопросы