Как получить красивый маленький текст в XNA без использования внешних библиотек?

13

В XNA технология spritefont ужасна. Nuclex делает работу намного лучше, но я не хочу никаких внешних ссылок, и я почти закончил с моей игрой.

При использовании таких шрифтов, как Sansation или Quicksand, он выглядит ужасно при меньших размерах шрифтов. Это так плохо!

Есть ли известный обходной путь для этого? Я попытался установить слишком большие размеры шрифтов, а затем уменьшил их в спрайте, но безуспешно.

Матиас Ликкегор Лоренцен
источник
Я использую SpriteFont для создания своих шрифтов для XNA, у вас есть большая гибкость. Я также проверяю, чтобы позиция шрифта была целым числом, чтобы не возникало неприятного сглаживания, но это, вероятно, не лучшее решение. Вы также можете попробовать точечную фильтрацию в своих вызовах spritebatch.
Джонатан Коннелл
Не забудьте протестировать свои маленькие шрифты на различных реальных устройствах и людях. Если это название 360 и, таким образом, предназначено для телевизоров, размеры всех визуальных элементов, как правило, должны быть немного больше, чем на экране ПК.
Ларс Виклунд
Я делаю игру для ПК, и размер шрифта установлен на целое число.
Матиас Ликкегор Лоренцен
1
Не масштабируйте тексты, создайте шрифт для каждого размера, который вам нужен.
Wouter
1
Еще несколько правил для вас здесь. Зафиксируйте вектор положения в целых числах перед рендерингом, иначе выборка сделает ваш выводимый текст мусором . Возможно, стоит поменять сэмплер текстуры на Point / Nearest Neighbor перед рендерингом текста. Особенно, если ваш шрифт имеет
пиксели

Ответы:

11

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

Тим Р.
источник
13

Процессор шрифтов XNA sprite использует сжатие DXT3, которое плохо работает с новым предварительно умноженным альфа-каналом в XNA 4.0. Отсюда блочный вид текста.

Процессор шрифтов Nuclex sprite выводит точно такие же данные, за исключением того, что внутреннее содержимоеTexture2D , содержащее данные растрового изображения шрифта, не сжимается, поэтому у него нет проблем с качеством.

Поскольку данные с процессора Nuclex имеют одинаковый формат, программа SpriteFontчтения XNA может их прочитать, и вам не нужно включать какие-либо библиотеки Nuclex для распространения в вашей игре.

(Это также удобно позволяет использовать тот же формат XML, что и определения родных спрайтов XNA.)

При этом нет ничего плохого в том, чтобы связать внешние библиотеки с вашей игрой. Это не так, как они установлены в вашей системе или что-то еще. (Вы могли бы даже пойти так далеко, чтобы объединить две сборки).

И то же самое относится и к коду (например, если вы беспокоитесь о контроле версий). Вы можете просто вставить Nuclex.Fonts.Content.TrueTypeImporter.dllсвой исходный код. Это на самом деле не имеет большого значения.

Эндрю Рассел
источник
9

Вы можете использовать пиксельные шрифты :

PF Темпеста вариант

Когда вы используете пиксельный шрифт с размером шрифта, для которого он был разработан (или целым кратным, например, 2x, 3x, 4x), вам гарантирован идеальный текстовый пиксель, который не требует сглаживания. Это означает, что вам никогда не придется иметь дело с ужасным сглаживанием, которое делает спрайтовые шрифты XNA такими плохими, а Nuclex - намного лучше. ( Эта статья исследует эту проблему и сравнивает их)

doppelgreener
источник