26.03.2016

Sposób na wyświetlanie tekstu bez użycia dodatkowej biblioteki

Od strony zasobów, font jest zapisany jak zwykła mozaika poszczególnych znaków, w jednym pliku, czyli sposób jej wczytywania nie różni się niczym od innych grafik tego typu. Po załadowaniu pliku z fontem tworzona jest powierzchnia RGBA, z której wycinane są znaki (na oddzielne, mniejsze powierzchnie), a ich wskaźniki umieszczane są w kontenerze vector<_SURFACE*> tiles w obiekcie typu tileSet.
Można zmienić kolor fontu poprzez funkcję tileSet::changeColor.
Indeks każdego znaku w kontenerze jest taki sam jak jego reprezentacja w standardowym kodzie ASCII.
Definicja funkcji drukującej dla okna znajduje się w "engine2d\screen.cpp". Jej deklaracja wygląda w ten sposób:
_SIZE print( tileSet* font, _SURFACE* d, _POS x, _POS y, const char *fmt, ... );

Funkcja zwraca liczbę wyświetlonych znaków (typ _SIZE i _POS jest wcześniej zdefiniowany jako unsigned int). Argument _SURFACE* d to jest powierzchnia gdzie ma się znaleźć dany tekst zapisany fontem (wskaźnik do obiektu typu tileSet). Lista argumentów dla tej funkcji jest przetwarzana przy pomocy vsprintf z biblioteki standardowej C.
Każde okno posiada flagę anchoredText, którą się ustawia wtedy, gdy chcemy, aby drukowany napis był zakotwiczony na danej powierzchni (wraz z przyjęciem kanału alfa powierzchni tła).

Powierzchnie z napisem można umieścić na macierzy sektorów, o której wspominałem tutaj. Lub też na wektorze wskaźników do obiektów wizualnych: vector< vector<visObj*> > vObjs;  (dla każdej warstwy oddzielny wektor), gdy nie chcemy umieszczać ich w macierzy sektorów. Przy nanoszeniu całego obrazu okna na wyświetlacz, poszczególne warstwy wektorów są wyświetlane zaraz po określonej warstwie macierzy.

Brak komentarzy:

Prześlij komentarz