我正在尝试创建一个类,它将创建一个带有一些白色文本的黑盒子。它最终能够根据发送给类的字符串来缩放框的大小。但是,首先,我不知道为什么文本不显示。我很感激帮助。
这是TextBox.h
class TextBox{
public:
sf::RectangleShape rect;
sf::Text text;
sf::Font font;
TextBox(std::string str, sf::Font f);
sf::Text getText();
这是TextBox.cpp中的TextBox构造函数。我发送给构造函数的sf :: Font是由SFML设置的字体。
#include "TextBox.h"
#include "string"
TextBox::TextBox(std::string str, sf::Font font){
rect.setFillColor(sf::Color::Black);
rect.setPosition(20, 20);
rect.setSize(sf::Vector2f(120,120));
text.setFont(font);
text.setString(str);
text.setCharacterSize(24);
text.setFillColor(sf::Color::White);
text.setPosition(rect.getPosition());
}
这是main.cpp中应该显示Rect和Text
的代码sf::Font font;
if (!font.loadFromFile(resourcePath() + "sansation.ttf")) {
return EXIT_FAILURE;
}
TextBox textBox("This Box", font);
textBox.text.setStyle(sf::Text::Bold);
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window: exit
if (event.type == sf::Event::Closed) {
window.close();
}
// Escape pressed: exit
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) {
window.close();
}
}
// Clear screen
window.clear();
window.draw(textBox.rect);
window.draw(textBox.text);
// Update the window
window.display();
我尝试使用返回sf :: Text对象的公共getText()方法,但它没有解决问题。 此外,我为rect做的修改工作,并显示rect。文字不是。
谢谢你和干杯
答案 0 :(得分:1)
font参数指的是只要文本使用它就必须存在的字体。实际上,文本并不存储自己的字体副本,而是保留指向您传递给此函数的指针。如果字体被销毁并且文本尝试使用它,则行为未定义。
在TextBox
构造函数中,您将font
作为副本f
传递,在初始化textBox
后,字体副本f
将被销毁,因此您的<{1}}未显示。
修复它很简单:使用pass by(常量)引用传递textBox.text
:
font
(您可能也希望将TextBox(std::string str, const sf::Font& f);
作为const引用传递)