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

C++ 如何更改文本对齐方式SFML/C++;,c++,text,alignment,sfml,text-alignment,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.

我想在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);

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

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

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

顺便说一下,制作一个
sf::Text
对象是一件相当昂贵的事情。我不建议在每一帧动态构建它,而是存储一个持久的,并且仅当字符串实际发生变化时才对其调用
setString
(尽管可能会对其进行优化,以避免在字符串相同的情况下重新创建文本,但这不适用于每一帧创建一个新对象).

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

textGIL.setString("Gil : " + to_string(Player1.gil));
FloatRect bounds = textGIL.getLocalBounds();
textGIL.setPosition(200 - bounds.width, 310);
顺便说一下,制作一个
sf::Text
对象是一件相当昂贵的事情。我不建议在每一帧动态构建它,而是存储一个持久的,并且仅当字符串实际发生变化时才对其调用
setString
(尽管可能会对其进行优化,以避免在字符串相同的情况下重新创建文本,但这不适用于每一帧创建一个新对象)