我做了一个Button
应该绘制一些顶点和字符串的类RenderWindow
。这是删除了不相关部分的代码:(here http://pastebin.com/4a5RuS2y是完整的代码)
namespace game {
class Button
{
public:
Button(int _x, int _y, int _width, int _height, std::string text)
{
...
sf::Font font;
font.loadFromFile("res/SF Intermosaic B.ttf");
label.setFont(font);
label.setString(text);
label.setCharacterSize(16);
label.setColor(sf::Color(20, 20, 20));
...
}
...
void draw(sf::RenderWindow& window) const
{
sf::RenderStates states;
states.texture = &texture;
window.draw(vertices[state], states);
window.draw(label); // If this line is commented out, there's no error.
}
private:
...
sf::Text label;
...
};
}
但是当我绘制文本时,程序编译得很好,但是当我运行它时,它立即崩溃。
这是 gdb 的回溯:
#0 0x00007ffff7bad604 in sf::Font::getTexture(unsigned int) const () from /usr/local/lib/libsfml-graphics.so.2
#1 0x00007ffff7bcd626 in sf::Text::draw(sf::RenderTarget&, sf::RenderStates) const () from /usr/local/lib/libsfml-graphics.so.2
#2 0x00007ffff7bc5bf4 in sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&) () from /usr/local/lib/libsfml-graphics.so.2
#3 0x00000000004033ad in game::Button::draw(sf::RenderWindow&) const ()
#4 0x0000000000403b64 in game::Menu::draw(sf::RenderWindow&) const ()
#5 0x00000000004042c5 in game::State::draw() ()
#6 0x0000000000402b4d in main ()
我该如何解决这个问题?
我猜这是因为你没有让字体对象保持活动状态。
See 文档 http://www.sfml-dev.org/documentation/2.0/classsf_1_1Text.php :
需要注意的是, sf::Text 实例不会复制它使用的字体,它只保留对其的引用。因此,sf::Font 在被 sf::Text 使用时不得被破坏(即永远不要编写使用本地 sf::Font 实例来创建文本的函数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)