Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.1] Zła pozycja tekstu

Ostatnio zmodyfikowano 2014-02-22 19:56
Autor Wiadomość
Solpatium
Temat założony przez niniejszego użytkownika
[SFML 2.1] Zła pozycja tekstu
» 2014-02-22 17:00:01
Witam!
Najlepiej będzie jeśli od razu pokażę w czym rzecz.
C/C++
#include <SFML/Graphics.hpp>
int main()
{
    sf::RenderWindow okno( sf::VideoMode( 800, 400 ), "Przyklad" );
    sf::Font czcionka;
    czcionka.loadFromFile( "arial.ttf" );
    sf::Text Tekst( "ABCDEF", czcionka, 200 );
    Tekst.setPosition( 0.0f, 0.0f );
    sf::RectangleShape kwadrat;
    kwadrat.setPosition( 0.0f, 0.0f ); kwadrat.setSize( sf::Vector2f( 50.0f, 50.0f ) ); kwadrat.setFillColor( sf::Color::Red );
    while( okno.isOpen() )
    {
        sf::Event event;
        while( okno.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 okno.close();
           
        }
       
        okno.clear();
        okno.draw( Tekst );
        okno.draw( kwadrat );
        okno.display();
    }
   
    return 0;
}

Powyższy program produkuje taki rezultat:
Opisywany problem
Opisywany problem

Problem leży w tym, że pozycja tekstu ustawiona jest na punkt o współrzędnych(0,0) (punkt ten wyznacza lewy górny róg czerwonego kwadratu) i jak widać tylko pierwsza współrzędna się zgadza. W pionie napis im jest większy tym niżej się znajduje (tutaj litery zaczynają się od (0,55)). Nawet napisy o wielkości 20 są niżej o jakieś 5 pikseli. Chyba nie ma więc jakiejś prostej proporcji. Ręczne przesuwanie napisu o jakąś wartość odpada. W jaki sposób mogę ustawić dowolny tekst na dowolnych współrzędnych, tak aby zaczynał się poprawnie, a nie "uciekał" w dół?
Od razu zaznaczam, że szukałem rozwiązania na internecie, jednak nie znalazłem niczego co by działało.

Ps. Próbowałem używać paru różnych czcionek, wszystkie dawały ten sam rezultat.
P-105112
Solpatium
Temat założony przez niniejszego użytkownika
» 2014-02-22 19:56:39
Po długich poszukiwaniach, próbach użycia sf::Glyph itd. w końcu znalazłem zaskakująco proste rozwiązanie. Wystarczy zrobić coś takiego:
C/C++
Tekst.setPosition( 0, 0 );
Tekst.setPosition( 0, 0 - Tekst.getLocalBounds().top );
P-105124
« 1 »
  Strona 1 z 1