Jak uzyskać piękny mały tekst w XNA bez korzystania z zewnętrznych bibliotek?

13

W XNA technologia spritefont jest okropna. Nuclex wykonuje tę pracę o wiele lepiej, ale nie chcę mieć żadnych zewnętrznych odniesień i prawie skończyłem swoją grę.

Podczas korzystania z czcionek takich jak Sansation lub Quicksand wygląda okropnie w mniejszych rozmiarach czcionek. To takie złe!

Czy istnieje znane obejście tego problemu? Próbowałem ustawić rozmiary czcionek na bardzo wysokie, a następnie pomniejszyć je w trybie spritebatch bez powodzenia.

Mathias Lykkegaard Lorenzen
źródło
Używam SpriteFont do tworzenia czcionek dla XNA, masz dużą elastyczność. Upewniam się również, że pozycja czcionki jest liczbą całkowitą, aby nie występowało nieprzyjemne wygładzanie krawędzi, ale prawdopodobnie nie jest to świetne rozwiązanie. Możesz także spróbować filtrować punkt w swoich połączeniach spritebatch tekstowych.
Jonathan Connell,
Nie zapomnij przetestować swoich małych czcionek na różnych rzeczywistych urządzeniach i ludziach. Jeśli jest to tytuł 360, a tym samym kierowany na telewizory, rozmiary wszystkich elementów wizualnych muszą być nieco większe niż na ekranie komputera.
Lars Viklund,
Robię grę na PC, a rozmiar czcionki jest ustawiony na liczbę całkowitą.
Mathias Lykkegaard Lorenzen
1
Nie skaluj tekstu, utwórz spritefont dla każdego rozmiaru, którego potrzebujesz.
Wouter
1
Więcej zasad dla ciebie tutaj. Przymocuj wektor pozycji do liczb całkowitych przed renderowaniem, w przeciwnym razie próbkowanie sprawi, że tekst wyjściowy będzie wyglądał na śmieci . Być może warto zmienić próbnik tekstur na Point / Nearest Neighbor przed renderowaniem tekstu. Zwłaszcza jeśli twoja czcionka jest pikselowana :)
Cubed2D

Odpowiedzi:

11

XNA pozwala importować teksturę jako spritefont . Prawdopodobnie możesz uzyskać lepsze podpowiedzi i wygładzanie czcionek, jeśli umieścisz każdy znak ręcznie w dobrym programie do edycji obrazów, zamiast polegać na arkuszu sprite generowanym przez XNA.

Tim R.
źródło
13

Procesor czcionek sprite XNA wykorzystuje kompresję DXT3, która nie działa dobrze z nową wstępnie zmultiplikowaną alfą w XNA 4.0. Stąd blokowy wygląd tekstu.

Procesor czcionek sprite Nuclex generuje dokładnie te same dane, z tym wyjątkiem, że wewnętrzny, Texture2Dktóry przechowuje dane mapy bitowej czcionek, nie jest kompresowany - więc nie ma problemów z jakością.

Ponieważ dane z procesora Nuclex są w tym samym formacie, SpriteFontczytnik XNA może je odczytać i nie trzeba dołączać żadnych bibliotek Nuclex do dystrybucji w grze.

(Dogodnie pozwala również na używanie tego samego formatu XML, co natywne definicje czcionek sprite XNA).

To powiedziawszy: nie ma nic złego w łączeniu zewnętrznych bibliotek z grą. To nie jest tak, że są instalowane w twoim systemie lub czymkolwiek. (Możesz nawet posunąć się tak daleko, aby połączyć dwa zespoły).

To samo dotyczy kodu (jeśli martwisz się na przykład kontrolą wersji). Możesz po prostu wprowadzić Nuclex.Fonts.Content.TrueTypeImporter.dllswój kod źródłowy. To właściwie nie jest wielka sprawa.

Andrew Russell
źródło
9

Możesz użyć czcionek pikselowych :

wariant tempesta pf

Kiedy używasz czcionki pikselowej o rozmiarze, dla którego została zaprojektowana (lub całej jej wielokrotności, np. 2x, 3x, 4x), masz gwarancję tekstu w pikselach, który nie wymaga wygładzania. Oznacza to, że nigdy nie będziesz musiał radzić sobie ze strasznym antyaliasingiem, który sprawia, że ​​czcionki sprite XNA są tak złe, a Nuclex o wiele lepsze. (W tym artykule przeanalizowano ten problem i porównano je)

doppelgreener
źródło