2015-01-06 45 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