Как изменить выравнивание текста SFML / Переполнение стека

Я хочу изменить выравнивание текста с выравниванием по левому краю с выравниванием по правому краю в 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);

Для ясности я хочу, чтобы текст начинался с правой стороны и шел влево, поскольку в строку добавлено больше символов, а не начало влево и перемещение вправо.

0

Решение

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 только когда строка действительно изменяется (хотя она может быть оптимизирована, чтобы не создавать заново текст, если строка одинакова, это не будет применяться для создания нового объекта каждый кадр).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]