2016-02-17 6 views
0

Я хочу изменить выравнивание текста с выравнивания по левому краю вправо, оправданное в SFML. Как я могу это сделать?Как изменить выравнивание текста SFML/C++

// 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); 

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

ответ

3

sf::Text не будет обрабатывать это автоматически для вас. Однако это дает инструменты для этого. После установки строки для отображения вы можете использовать getLocalBounds(), чтобы получить ограничивающий прямоугольник. Затем вы можете использовать элемент width из этого прямоугольника и вычесть его из нужной правой точки выравнивания, чтобы получить левую позицию, которую затем можно передать как координату x в .

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

По дороге, sf::Text объект является довольно дорогая вещь, чтобы сделать. Я бы не рекомендовал строить его на ходу каждый кадр, а вместо этого хранить постоянный, и называть его setString только тогда, когда строка фактически изменяется (хотя она может быть оптимизирована, чтобы не воссоздавать текст, если строка такая же, 't применить к созданию нового объекта в каждом кадре).

Смежные вопросы