我在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]);
希望我没有忘记添加任何内容
答案 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){
^^^
//..
对象而不是其副本。