Vývojářský blog Tomáše Jechy

Tisk článku Tisk článku

XNA SpriteFont - diakritika

[Zpět na blog]

Datum: 5. 11. 2009 0:41       Autor: Tomáš Jecha       Zobrazeno: 2024x

Kategorie: VB.NET, C#, Aplikace, VS


Pokud se někdy dostanete do kontaktu s herním XNA enginem, je dost pravděpodobné, že mezi vaše přání bude patřit i vykreslování textů na obrazovku. XNA nabízí možnost použití tzv. spritefontů. Tedy písma, které se při kompilaci vyrenderuje a nás tak nemusí zajímat, zda je písmo na cílovém stroji nainstalováno (v případě Xboxu je to naprosto pochopitelné). Při vytvoření souboru spritefont do složky Content zjistíme, že se jedná o běžný XML soubor definující velikost, typ a rozsahy znaků, které se připraví při kompilaci do projektu.

Pokud se při základním nastavení pokusíte vyrenderovat diakritiku, příliš neuspějete. Implicitní rozsah zahrnutých znaků ji totiž neobsahuje. Získáte tuto chybu:

The character 'ř' (0x0159) is not available in this SpriteFont. If applicable, adjust the font's start and end CharacterRegions to include this character.
Název parametru: character

Připravil jsem proto seznam rozsahů, které zahrnou všechny “české” znaky v podobě malého i velkého písmene:

  <CharacterRegion><Start>&#193;</Start><End>&#193;</End></CharacterRegion> 

  <CharacterRegion><Start>&#268;</Start><End>&#268;</End></CharacterRegion> 

  <CharacterRegion><Start>&#270;</Start><End>&#270;</End></CharacterRegion> 

  <CharacterRegion><Start>&#201;</Start><End>&#201;</End></CharacterRegion> 

  <CharacterRegion><Start>&#282;</Start><End>&#282;</End></CharacterRegion> 

  <CharacterRegion><Start>&#205;</Start><End>&#205;</End></CharacterRegion> 

  <CharacterRegion><Start>&#327;</Start><End>&#327;</End></CharacterRegion> 

  <CharacterRegion><Start>&#211;</Start><End>&#211;</End></CharacterRegion> 

  <CharacterRegion><Start>&#344;</Start><End>&#344;</End></CharacterRegion> 

  <CharacterRegion><Start>&#352;</Start><End>&#352;</End></CharacterRegion> 

  <CharacterRegion><Start>&#356;</Start><End>&#356;</End></CharacterRegion> 

  <CharacterRegion><Start>&#218;</Start><End>&#218;</End></CharacterRegion> 

  <CharacterRegion><Start>&#366;</Start><End>&#366;</End></CharacterRegion> 

  <CharacterRegion><Start>&#221;</Start><End>&#221;</End></CharacterRegion> 

  <CharacterRegion><Start>&#381;</Start><End>&#381;</End></CharacterRegion> 

  <CharacterRegion><Start>&#225;</Start><End>&#225;</End></CharacterRegion> 

  <CharacterRegion><Start>&#269;</Start><End>&#269;</End></CharacterRegion> 

  <CharacterRegion><Start>&#271;</Start><End>&#271;</End></CharacterRegion> 

  <CharacterRegion><Start>&#233;</Start><End>&#233;</End></CharacterRegion> 

  <CharacterRegion><Start>&#283;</Start><End>&#283;</End></CharacterRegion> 

  <CharacterRegion><Start>&#237;</Start><End>&#237;</End></CharacterRegion> 

  <CharacterRegion><Start>&#328;</Start><End>&#328;</End></CharacterRegion> 

  <CharacterRegion><Start>&#243;</Start><End>&#243;</End></CharacterRegion> 

  <CharacterRegion><Start>&#345;</Start><End>&#345;</End></CharacterRegion> 

  <CharacterRegion><Start>&#353;</Start><End>&#353;</End></CharacterRegion> 

  <CharacterRegion><Start>&#357;</Start><End>&#357;</End></CharacterRegion> 

  <CharacterRegion><Start>&#250;</Start><End>&#250;</End></CharacterRegion> 

  <CharacterRegion><Start>&#367;</Start><End>&#367;</End></CharacterRegion> 

  <CharacterRegion><Start>&#253;</Start><End>&#253;</End></CharacterRegion> 

  <CharacterRegion><Start>&#382;</Start><End>&#382;</End></CharacterRegion>

Kód vložte za základní rozsahy v spritefont souboru:

spritefont file xna characterregions

Při vykreslování již žádné další problémy:

czech spritefont xna


> Na začátek

 

Hodnocení:

Hlasů: 6
Zvolte své hodnocení

Tomáš Jecha

Tomáš Jecha již několikátým rokem získal ocenění Microsoft MVP. V současné době pracuje ve společnosti AVAST jako architekt a vývojář interních systémů. Působí také jako lektor a konzultant v počítačové škole Gopas. V současné době se zajímá především o SQL Server a technologie nad .NET Frameworkem 4. Společně s Tomášem Hercegem napsal tento web a stará se o jeho administraci.

Podpořte vznik dalších článků
RSS Feed RSS Feed

Diskuse

1 

Chytré

Datum: 5.11.2009 10:23
Autor: Tomáš Herceg
Hodnocení autora: 1660
Příspěvků: 3533
Pěkné. Obdivuji, že se Ti chtělo zjišťovat všechny ty číselné kódy. Já vždy horní hranici toho defaultního rozsahu zvýšil na Ɛ a bylo :-).
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Chytré

Datum: 5.11.2009 10:43
Autor: Tomáš Jecha
Hodnocení autora: 697
Příspěvků: 1285
No vzhledem k tomu, že jsou ty kódy pro "české" znaky definované (takže vím, že tam žádný nechybí), tak to zas tak složité nebylo. A říkal jsem si, že by se to mohlo hodit i někomu dalšímu a to včetně mě, až to budu řešit znovu.

To zvýšení jsem dělal taky, ale pak jsem si usmyslel, že zkusím být trochu ohleduplný k prostředkům :-). Zvlášť při velkém počtu písem.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Příliš složité

Datum: 15.11.2009 20:36
Autor: Petr Mánek
Hodnocení autora: 102
Příspěvků: 175
Zdravím,

já už jsem se před několika měsíci s touto záležitostí potýkal a zjistil metodou pokus / omyl a s pomocí tabulky znaků, že je nejjednodušší pro plnou podporu české diakritiky a dalších častých symbolů zapsat do souboru SpriteFontu toto:


    <CharacterRegions>
      <CharacterRegion>
        <Start>&#32;</Start>
        <End>&#390;</End>
      </CharacterRegion>
    </CharacterRegions>
 

Podle mě je vaše řešení trochu složité, to moje zase obsahuje více znaků a bude tedy více zabírat i paměť...

Je ale užitečné, že jste článek zabývající se touto problematikou uveřejnil, protože když jsem hledal řešení na tuto záležitost, nic jsem nenašel (mimo jiné protože se anglicky mluvící většina internetu nezabývá problematikou národně specifických znaků)...
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Příliš složité

Datum: 16.11.2009 12:32
Autor: Tomáš Jecha
Hodnocení autora: 697
Příspěvků: 1285
Moje řešení je složitější na první "vygenerování" - což už tady je naservírované. Vzal jsem prostě seznam českých znaků v tabulce unicode a pro ten jsem vygeneroval rozsahy. Je to čísté řešení a jeho použití v projektu následně složité není, pouze vkopírujete rozsahy do souboru s písmem. Při množství písem se tím ušetří nemalé množství paměti.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
1 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.