2015-01-06 2 views
0

나는 SFML로 일부 텍스트를 가운데 정렬하려고합니다. 아래 그림에서 볼 수 있듯이 실제로 작동하지 않습니다. enter image description hereSFML 그리기 중심 맞춤 텍스트

내 수학에 문제가있을 수 있습니까? 에서

void TextRenderer::renderCentered(sf::RenderWindow& window, std::string string, sf::Vector2f  position, int size, sf::Color color) { 
    sf::Text text; 

    text.setFont(TextRenderer::kavoon); 
    text.setString(string); 

    float width = text.getLocalBounds().width; 

    text.setPosition(position.x - width/2, position.y); 

    text.setCharacterSize(size); 
    text.setColor(color); 

    window.draw(text); 
} 

렌더링 방법

TextRenderer::renderCentered(*window, pickuptext.str(), sf::Vector2f(player->sprite.getPosition().x, player->sprite.getPosition().y - 48), 28, sf::Color(255, 145, 61)); 
TextRenderer::renderCentered(*window, pickuptextdesc.str(), sf::Vector2f(player->sprite.getPosition().x, player->sprite.getPosition().y - 16), 18, sf::Color(255, 145, 61)); 
+0

'position.x'는 경계 상자의 가운데 또는 왼쪽 위치입니까? –

+0

잘 모르겠지만, 부적절한 글립 크기를 가진 글꼴 중 일부 글꼴이 SFML의 테두리 기능과 잘 어울리지 않는다는 것을 알았습니다. 지금은 하드 코딩 된 조정이이를 처리 할 수있는 유일한 방법 인 것 같습니다. SFML 2.2의 변경 내역에는 각'sf :: Font'에 대한'Info' 구조체가 포함되어 있습니다.이 구조체는 나중에 도움이 될 수 있습니다 만, 현재는 글꼴의 계열에 대해서만 설명합니다. – Conduit

답변

2

경계 상자 내에서 텍스트를 가로 중심의 공식은 다음과 같습니다 당신이 경계 상자 수평 중심점을 제공 할 수 없습니다와 같은

text_start = bounding_box_width/2 - text_width/2; 

가 보이는 .

+0

플레이어 위치는 어떻게 설명합니까? 경계 상자 란 무엇입니까? 플레이어 경계 상자는 무엇입니까? – Wahoozel

+0

경계 상자는 텍스트의 경계 상자 또는 사각형입니다. –

+0

그럼 text_width는 무엇입니까? 똑같지 않니? – Wahoozel