Ubuntu12.10でSFML2.0ライブラリを使用しています。
Sudo apt-get install libsfml-dev
それらを取得します。今、私はsf :: Textを画面の中央に配置しようとしています。これを行うには、テキストの原点(位置の設定、回転などの変換に使用される場所)をsf :: Textの境界ボックスの中央に設定してから、位置をに設定します。画面の中央、次のように:
//declare text
sf::Font font;
sf::Text text;
font.loadFromFile("helvetica.ttf");
text.setFont(font);
text.setString("RANDOMTEXT");
text.setCharacterSize(100);
text.setColor(sf::Color::White);
text.setStyle(sf::Text::Regular);
//center text
sf::FloatRect textRect = text.getLocalBounds();
text.setOrigin(textRect.width/2,textRect.height/2);
text.setPosition(sf::Vector2f(SCRWIDTH/2.0f,SCRHEIGHT/2.0f));
これは機能しません。テキストは、x軸が3、y軸が25のように、ある程度ずれています。奇妙なことに、テキストの境界ボックスを表すようにsf :: RectangleShapeを設定すると、その長方形IS中央に配置され、テキストに合わせて正しいサイズになります。しかし、テキストはそこから描画されます。前述のオフセットのあるボックス。
この画像では、画面の中央をマークし、テキストの境界ボックスの代わりにsf :: RectangleShapeをペイントし、sf :: Textをペイントしました。
http://i.imgur.com/4jzMouj.png
その画像は次のコードによって生成されました:
const int SCRWIDTH = 800;
const int SCRHEIGHT = 600;
int main() {
sf::RenderWindow window;
window.create(sf::VideoMode(SCRWIDTH,SCRHEIGHT), "MYGAME" ,sf::Style::Default);
window.setMouseCursorVisible(false);
window.setVerticalSyncEnabled(true);
sf::Font font;
sf::Text text;
font.loadFromFile("helvetica.ttf");
text.setFont(font);
text.setString("RANDOMTEXT");
text.setCharacterSize(100);
text.setColor(sf::Color::White);
text.setStyle(sf::Text::Regular);
sf::FloatRect textRect = text.getLocalBounds();
text.setOrigin(textRect.width/2,textRect.height/2);
text.setPosition(sf::Vector2f(SCRWIDTH/2.0f,SCRHEIGHT/2.0f));
sf::RectangleShape rect(sf::Vector2f(textRect.width,textRect.height));
rect.setFillColor(sf::Color::Blue);
rect.setOrigin(rect.getSize().x/2,rect.getSize().y/2);
rect.setPosition(text.getPosition());
sf::RectangleShape RectW;
RectW.setSize(sf::Vector2f(SCRWIDTH, 0.0));
RectW.setOutlineColor(sf::Color::Red);
RectW.setOutlineThickness(1);
RectW.setPosition(0, SCRHEIGHT / 2);
sf::RectangleShape RectH;
RectH.setSize(sf::Vector2f(0.0, SCRHEIGHT));
RectH.setOutlineColor(sf::Color::Red);
RectH.setOutlineThickness(1);
RectH.setPosition(SCRWIDTH / 2, 0);
while(window.isOpen()) {
window.clear();
window.draw(rect);
window.draw(text);
window.draw(RectW);
window.draw(RectH);
window.display();
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) {
window.close();
}
}
return 1;
}
どうすればそれを中央に配置し、境界ボックスの内側に配置することができますか?
sf::Text::getLocalBounds()
のtop
フィールドとleft
フィールドの値はゼロ以外であるため、原点を中央に配置するときに無視することはできません。
代わりにこれを試してください:
//center text
sf::FloatRect textRect = text.getLocalBounds();
text.setOrigin(textRect.left + textRect.width/2.0f,
textRect.top + textRect.height/2.0f);
text.setPosition(sf::Vector2f(SCRWIDTH/2.0f,SCRHEIGHT/2.0f));
これはSFMLのテキストレンダリングに関する既知の問題だと思います。彼らの課題追跡システムに行き、 この課題 を見てください。
また、彼らの開発フォーラムで尋ねることもできます。開発者はいつもとてもフレンドリーで親切です。