Я хочу изменить выравнивание текста с выравниванием по левому краю с выравниванием по правому краю в 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()
чтобы получить ограничивающий прямоугольник. Тогда вы можете использовать width
член из этого прямоугольника, и вычесть это из желаемой правой точки выравнивания, чтобы получить левую позицию, которую вы можете затем передать в качестве координаты х setPosition
,
textGIL.setString("Gil : " + to_string(Player1.gil));
FloatRect bounds = textGIL.getLocalBounds();
textGIL.setPosition(200 - bounds.width, 310);
Кстати, sf::Text
объект довольно дорогая вещь, чтобы сделать. Я бы не рекомендовал создавать его на лету каждый кадр, а вместо этого сохранять постоянный и вызывать setString
только когда строка действительно изменяется (хотя она может быть оптимизирована, чтобы не создавать заново текст, если строка одинакова, это не будет применяться для создания нового объекта каждый кадр).
Других решений пока нет …