Текст SFML не рисуется в окне - PullRequest
0 голосов
/ 22 октября 2018

Я использую SFML с C ++.Проблема в том, что если я использую функции, в окне ничего не рисуется, но я могу рисовать, когда делаю текст локальным.Подскажите пожалуйста, что я сделал не так

Код:

В файле game.cpp

void Game::loadMenuText(sf::Font f, std::string textString, int x, int y, sf::Text *tex){

tex->setFont(f);
tex->setCharacterSize(16);
tex->setFillColor(sf::Color(0x225522ff));
tex->setStyle(sf::Text::Bold);
tex->setString(textString);
tex->setPosition(x,y);

}

void Game::loadFont(){

if (!font.loadFromFile("font/arial.ttf"))
{
    std::cout<<"Font could not be loaded";
}

}

void Game::run(){
    loadFont();
    sf::Text ButtonTex;
    loadMenuText(font,"Play",20,20,&ButtonTex);
    menuText.push_back(ButtonTex);
    window.draw(menuText[0]);

}

в файле game.hpp

private:
sf::Font font;
std::vector<sf::Text> menuText;
public:
void run();
void loadFont();
void loadMenuText(sf::Font, std::string, int, int, sf::Text *tex);

Надеюсь, я ничего не забыл добавить

1 Ответ

0 голосов
/ 22 октября 2018

Прочитать ссылку о Текст

Важно отметить, что экземпляр sf :: Text не копирует используемый шрифт, он только сохраняет ссылку наЭто.Таким образом, sf :: Font не должен быть уничтожен, пока он используется sf :: Text (т.е. никогда не пишите функцию, которая использует локальный экземпляр sf :: Font для создания текста).

ваша проблема в том, что вы передаете локальную переменную sf::Font f в функцию loadMenuText в tex, поэтому это ведет к неопределенному поведению, tex относится к ресурсу, который был удален.

Измените свою подпись на:

void Game::loadMenuText(sf::Font& f, std::string textString, int x, int y, sf::Text *tex){    
                                 ^^^ 
 //..

тогда вы будете использовать оригинальный font объект вместо его копии.

...