如何更改文本对齐SFML / C ++

时间:2016-02-17 05:28:24

标签: c++ text alignment sfml text-alignment

我想在SFML中将文本对齐方式从左对齐更改为右对齐。我怎样才能做到这一点?

    // Gil text
sf::Text textGIL("Gil ", font3, 18);
textGIL.setColor(sf::Color::White);

textGIL.setString("Gil : " + to_string(Player1.gil)); //convert player1's gil to a string

window.draw(textGIL);
        textGIL.setPosition(200, 310);

为了清楚起见,我希望文本从右侧开始并向左移动,因为字符串中添加了更多字符,而不是向左开始向右移动。

1 个答案:

答案 0 :(得分:3)

sf::Text不会自动为您处理此问题。但是,它确实提供了工具来完成它。设置要显示的字符串后,可以使用getLocalBounds()来获取边界矩形。然后,您可以使用此矩形中的width成员,并从所需的右对齐点中减去该成员以获得左侧位置,然后您可以将其作为x坐标传递给setPosition

textGIL.setString("Gil : " + to_string(Player1.gil));
FloatRect bounds = textGIL.getLocalBounds();
textGIL.setPosition(200 - bounds.width, 310);

顺便说一下,sf::Text对象是一件相当昂贵的事情。我不建议每一帧都在运行它,而是存储一个持久的,并且只在字符串实际更改时调用setString(尽管可能优化为不重新创建文本,如果字符串是同样,这不适用于每帧创建一个新对象。)