Mój projektant interfejsu użytkownika stworzył piękny PSD z interfejsu użytkownika i wszystko ładnie. Największym problemem, jaki mam, jest konwersja niektórych bardziej eleganckich czcionek używanych w coś do renderowania w grze. Czy istnieje sposób na konwersję tych stylów czcionek w Photoshopie na czcionkę bitmapową?
Muszę być w stanie renderować taki tekst wewnątrz mojego kodu:
Odpowiedzi:
Dobra, musisz mi wybaczyć, że nie podałem ci konkretnego kodu XNA, ponieważ nie mam wiedzy na tej platformie, ale powiem ci, że powinieneś pracować na każdym silniku gry, który pozwala rysować duszki.
Czcionki to nie jedyny problem, więc dam ci radę, a potem odpowiem na twoje pytanie. Dzięki tym dwóm rzeczom powinieneś być w stanie nawiązać miłosną więź ze swoim projektantem GUI, a oboje będziecie mogli bardzo szczęśliwie tworzyć gry.
Pierwszą rzeczą jest to, że usiądziesz ze swoim projektantem i poprosisz ją, aby dała ci dwa zestawy plików. Pierwszy to zestaw przezroczystych plików tworzących GUI (optymalnie w formacie PSD lub DXT). Za każdy przycisk, naprawioną etykietę, tło, ramkę i pole tekstowe otrzymasz jeden plik (możesz także wykonać teksturowanie, ale zalecam to zrobić po złożeniu GUI, a następnie dostosowaniu współrzędnych źródłowych podczas blittingu). W tym miejscu należy pominąć tekst niestatyczny (wrócę później).
Drugą rzeczą, którą dostaniesz, jest faktyczny wygląd GUI, tym razem w formacie Photoshop. W przypadku tego pliku poprosisz swojego projektanta o wykonanie całego projektu GUI, używając tylko plików, które wcześniej ci dała.
Następnie umieści każdy element GUI na osobnej warstwie, nie używając żadnych efektów. Powiesz jej, żeby zrobiła ten piksel perfekcyjnie, ponieważ miejsca, w których wszystko położy, to właśnie tam wszystko znajdzie się w finalnej grze.
Gdy to osiągniesz, dla każdej warstwy naciśniesz Ctrl-T, a na panelu Informacje (F8) zwrócisz uwagę na współrzędne X i Y dla każdego elementu. Upewnij się, że twoje jednostki są ustawione na piksele (Preferencje-> Jednostki i linijki-> Jednostki). Są to pozycje, których będziesz używać podczas rysowania duszków.
Teraz, w przypadku czcionek, jak być może teraz wyraźnie wiesz, nie będziesz w stanie sprawić, aby czcionki wyglądały dokładnie tak samo, jak w Photoshopie przy użyciu interfejsów API renderowania tekstu. Będziesz musiał wstępnie renderować swoje glify, a następnie programowo składać swoje teksty. Jest na to wiele sposobów i wspomnę o tym, którego używam.
Pierwszą rzeczą jest przekształcenie wszystkich glifów w jeden lub więcej plików. Jeśli zależy ci tylko na języku angielskim, wystarczy jedna tekstura dla wszystkich glifów, ale jeśli chcesz mieć bardziej rozbudowany zestaw znaków, możesz użyć kilku plików. Upewnij się tylko, że wszystkie potrzebne glify są dostępne w czcionce wybranej przez projektanta.
Aby renderować glify, możesz użyć funkcji
System.Drawing
pobierania metryk czcionek i rysowania glifów:Dzięki temu narysowałeś białe glify na przezroczystym tle na wiązce plików PNG i utworzyłeś plik indeksu, który informuje cię o każdym punkcie kodowym, w którym pliku znajduje się glif, jego lokalizacji i wymiarach. Zauważ, że umieszczam również dwa dodatkowe piksele, aby oddzielić każdy glif (aby pomieścić w celu uzyskania dalszych efektów)
Teraz dla każdego z tych plików umieść go w Photoshopie i wykonaj wszystkie wymagane filtry. Możesz ustawić kolory, obramowania, cienie, kontury i cokolwiek innego. Upewnij się tylko, że efekty nie powodują nakładania się glifów. Jeśli tak, dostosuj odstępy, ponownie renderuj, spłucz i powtórz. Zapisz jako PNG lub DXT i wraz z plikiem indeksu umieść wszystko w swoim projekcie.
Rysowanie tekstu powinno być bardzo proste. Dla każdego znaku, który chcesz wydrukować, znajdź jego lokalizację za pomocą indeksu, narysuj go, przesuń pozycję i powtórz. Możesz także dostosować odstępy, kerning (trudne), pionowe odstępy, a nawet kolorowanie. W lua:
I proszę bardzo. Powtarzaj dla każdej innej czcionki (i optymalnie również rozmiaru)
Edycja : Zmieniłem kod, aby go używał
Graphics.MeasureString
zamiast,TextRenderer.MeasureText()
ponieważ oba używają różnych systemów pomiarowych i mogą prowadzić do niespójności między zmierzonym i narysowanym glifem, szczególnie w przypadku przewieszonych glifów występujących w niektórych czcionkach. Więcej informacji tutaj .źródło
Cóż, jak ktoś inny powiedział w XNA, spritefont wykonuje dla ciebie ciężkie podnoszenie. na stronie klubu twórców znajduje się eksporter czcionek bitmapowych, który eksportuje obrazy czcionek w stylu XNA. ( http://xbox.create.msdn.com/en-US/education/catalog/utility/bitmap_font_maker ) Następnie możesz otworzyć go w Photoshopie lub czymkolwiek i sprawić, by wyglądał ładnie. Następnie dodajesz teksturę do projektu treści, a następnie w typie treści zaznacz teksturę czcionki duszka. W kodzie ładujesz go jak normalną czcionkę sprite
(Przykład: http://www.youtube.com/watch?v=SynGWrWYUQI )
źródło
Rozwiązanie jest dość proste i jest używane przez dużą liczbę gier. Wszystko, co musisz zrobić, to traktować czcionki tak, jakby były sprajtami.
Poproś projektanta, aby narysował cały zakres cyfr i liter, których chcesz użyć w swojej grze. Następnie wyrenderuj je na obrazach statycznych o różnych rozmiarach (.png, .bmp, niezależnie od używanego formatu). Będziesz miał coś takiego:
Teraz wszystko, co musisz zrobić, to wyrenderować każdą literę z „arkusza czcionek” tak, jakby to była duszka na ekranie. Z pewnością pomaga zbudować klasę pomocniczą do tłumaczenia między ciągami znaków i duchami.
Moja implementacja jest bardziej złożona, ale przydatna. Arkusz czcionek jest zbudowany jak na powyższym obrazie z wieloma czcionkami w jednym pliku .png. mam
.ini
plik, który mapuje literę każdej czcionki na pozycję na arkuszu, wraz z jej szerokością i wysokością. To pozwala mojemu projektantowi (i mnie) szaleć, tworząc fajne czcionki bez konieczności dotykania żadnego kodu. Podczas rysowania ciągu na ekranie mam metodę, która sprawdza czcionkę ichar
plik .ini, aby uzyskać pozycję i granice litery z arkusza czcionek, a następnie po prostu rysujęTexture2D
zaSpriteBatch.Draw()
pomocą źródłaRectangle
litery w pytaniu.źródło
Interfejs użytkownika jest obszernym i złożonym tematem. Renderowanie czcionek jest trudną częścią. Radzę korzystać z już istniejącej biblioteki, która pozwala wyświetlać zawartość Flash lub HTML w grze, zamiast ponawiać wszystko samodzielnie.
Awesomium wygląda obiecująco i powinien współpracować z XNA , więc możesz spróbować. Jest darmowy do użytku w niekomercyjnych grach lub jeśli nie zarabiasz ton pieniędzy:
źródło
Jeśli szukasz bardziej efektownych efektów niż zwykły importer .spritefont, możesz spróbować wyszukać „generator czcionek bitmapowych”.
Osobiście wolę ten: http://www.ironstarmedia.co.uk/2010/01/free-game-dev-utility-fancy-bitmap-font-generator/
Inne pomysły:
źródło
XNA
wykonuje dla ciebie całą ciężką pracę. DziękiSpritefont
niemu możesz łatwo przekonwertować plik czcionki na komputerze na rodzaj arkusza sprite, o który pytasz, definiując plik XML.Po dodaniu pliku XML do projektu Content załaduj go
ContentManager
:Oto przykład pliku .spritefont z mojego projektu treści:
źródło
Nie jestem pewien, ponieważ nigdy go nie użyłem, ale ludzie sugerowali mi użycie Glyph Designer. Oto samouczek wideo:
http://vimeo.com/32777161
Tutaj jest dyskusja na temat Photoshopa.
Są też ludzie używający edytora czcionek Hiero .
W tej stronie znajduje się lista innych edytorów czcionek, które możesz chcieć obejrzeć.
Daj mi znać, który z nich jest dla Ciebie najlepszy :)
źródło