Как нарисовать специальные символы в XNA?

Я хочу нарисовать специальные символы, такие как: "π,Ω,θ,ξ" в XNA, используя метод SpriteBatch.DrawString(), но я получаю исключение, говоря, что эти символы не доступны в файле SpriteFont. Есть ли решение для этого?

1 ответ

Решение

Вы должны включить эти символы в ваш spritefont.

В вашем файле spritefont вам нужен еще один "регион" для греческих букв:

<CharacterRegions>
  <CharacterRegion><!-- Normal letters -->
    <Start>&#32;</Start>
    <End>&#126;</End>
  </CharacterRegion>
  <CharacterRegion><!-- Greek letters -->
    <Start>&#913;</Start>
    <End>&#969;</End>
  </CharacterRegion>
</CharacterRegions>

Когда вы включите это, вы сможете отобразить эти символы с этим spritefont:

Пример использования греческих символов в spritefont


Использование инструмента "Карта символов"

Чтобы узнать, в каком регионе находятся эти символы, используйте Character Map, красивое приложение, найденное в All Programs -> Accessories -> System Tools,

Когда вы выбираете символ, он отображает его код символа, например, omega (ω) - это U+03C9, что является шестнадцатеричным 0x03C9 или десятичным 969.


Различные способы определения регионов персонажей

Существует 3 способа определения регионов в файле SpriteFont, и они связаны с тремя способами написания символов в XML:

  • Десятичное представление: т.е. &#126; - формат &#nnnn;
  • Шестнадцатеричное представление: т.е. &#x7E; - формат &#xnnnn;
  • Фактический характер: т.е. ~

Это три способа написать одну и ту же вещь в XML, так что вы можете использовать разные способы для определения ваших регионов. Выше было десятичное представление регионов.

Вот шестнадцатеричное представление, которое проще всего получить из карты персонажей:

Наконец, вы можете использовать фактические символы для определения ваших регионов, и вы получите их, скопировав их из текстового поля в инструменте Карта символов:

Другие вопросы по тегам