Я работаю над проектом, который нуждается в кнопках с SFML. Мы используем версию 2.4.2. Мне удалось добиться всего, кроме выравнивания текста, и я очень озадачен тем, в чем проблема.
Для того, чтобы установить выравнивание текста, я знаю, что должен правильно установить его начало и положение. Поскольку люди могут изменять текст кнопки, я решил добавить функцию выравнивания в функцию setString.
В целях отладки я добавил пару выводов консоли, чтобы показать мне некоторые из моих данных. Вот как выглядит функция:
void rgf::Button::setString(const sf::String & str)
{
text.setString(str);
std::cout << "Original Origin: " << text.getOrigin().x << ", " << text.getOrigin().y << std::endl;
std::cout << "Original Position: " << text.getPosition().x << ", " << text.getPosition().y << std::endl;
std::cout << "Original LocalBounds: " << text.getLocalBounds().width << ", " << text.getLocalBounds().height << std::endl;
auto textRect = text.getLocalBounds();
auto btnRect = body.getLocalBounds();
text.setOrigin(textRect.left + textRect.width / 2, textRect.height + textRect.height / 2);
text.setPosition(btnRect.left + btnRect.width / 2, btnRect.top + btnRect.height / 2);
std::cout << "New Origin: " << text.getOrigin().x << ", " << text.getOrigin().y << std::endl;
std::cout << "New Position: " << text.getPosition().x << ", " << text.getPosition().y << std::endl;
std::cout << "New LocalBounds: " << text.getLocalBounds().width << ", " << text.getLocalBounds().height << std::endl;
}
Консоль выводит все позиции, новые и старые, как 0 (кроме новой позиции, которая возвращает ожидаемые координаты 50 и 25).
В соответствии с тем, что я нашел в Интернете, как только я установлю текстовую строку, localBounds моего текстового объекта должны измениться. Это не произойдет, если текст не был нарисован один раз в sf :: RenderWindow.
Я сделал так, чтобы функция кнопки установила строку в другое значение, это привело к правильной установке начала координат и положения. Установка значения строки в конструкторе контейнера (до его отрисовки) не устанавливает источник правильно.
Я провел день на этом, и я не понимаю, чего мне не хватает. Любая помощь будет принята с благодарностью.
Функция setFont () была вызвана после функции setString (), что означало, что localBounds все еще были 0, поскольку не было шрифта для указания ширины или высоты.
Других решений пока нет …