SFML文本未在窗口上绘制

时间:2018-10-22 10:50:55

标签: c++ sfml

我在C ++中使用SFML。问题是,如果我使用函数,则在窗口上什么也没画,但是当我将文本设为本地时可以画图。请告诉我我做错了什么

代码:

在game.cpp文件中

"Hello from DIV"

}

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

}

在game.hpp文件中

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

希望我没有忘记添加任何内容

1 个答案:

答案 0 :(得分:3)

阅读有关Text的参考

  

请务必注意,sf :: Text实例不会复制   它使用的字体,仅保留对其的引用。因此,一个sf :: Font   不得在sf :: Text使用它时破坏它(即从不   编写使用本地sf :: Font实例创建函数的函数   文字)。

您的问题是您要将函数APIs中的局部变量sf::Font f传递给loadMenuText,从而导致未定义的行为,tex指的是已删除的资源。 / p>

将签名更改为:

tex

然后,您将使用原始void Game::loadMenuText(sf::Font& f, std::string textString, int x, int y, sf::Text *tex){ ^^^ //.. 对象而不是其副本。