Как сделать лист шрифтов (для использования в python roguelike)

Я продолжал улучшать свой python roguelike и углубился в это руководство: http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod. Я также сделал свой собственный шрифт для этой игры, но не знаю, как это сделать. Это ссылка на изображение шрифта, которое я сейчас использую: http://i.imgur.com/j6FdNky.png. В коде Python для пользовательского шрифта устанавливается значение «arial10x10.png», которое является этим изображением шрифта. Я попытался сделать изображение из собственного шрифта, но оно сильно искажалось.

Кто-нибудь знает, как я могу реализовать свой собственный шрифт? Кроме того, я использую libtcod, и у меня есть только собственный шрифт в формате .ttf. Спасибо.


person Jeremy Darrach    schedule 10.03.2013    source источник


Ответы (1)


Чтобы преобразовать шрифт TrueType в растровое изображение так, как ожидает libtcod, вам следует использовать отдельную библиотеку - рендеринг шрифтов - удивительно сложная задача. FreeType - очень популярная библиотека с открытым исходным кодом для рендеринга шрифтов. Вы можете найти интерфейс Python здесь: http://code.google.com/p/freetype-py/. Вам нужно будет использовать FreeType только в инструменте, который вы будете использовать при разработке своего рогалика, а не в вашей реальной игре.

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

Используя вашу библиотеку визуализации шрифтов, визуализируйте каждый символ отдельно в желаемом размере. Обратите внимание на размер, созданный для каждого - например, "." будет маленьким, а буква w будет большим, даже при том же размере шрифта. Вы должны рассчитать не только высоту, но и высоту над базовой линией и высоту ниже базовой линии. (Пример: если обе буквы A и g имеют высоту 16 пикселей, возможно, вам все равно понадобится прямоугольник высотой более 16 пикселей, чтобы правильно выровнять оба элемента внутри него - от базовой линии к базовой линии.) Найдите наименьший прямоугольник. размер, который будет соответствовать всем этим размерам - это то, насколько большой должна быть каждая ячейка в вашем листе шрифтов.

Как только вы узнаете, насколько велик будет ваш лист, сделайте еще один проход через все желаемые буквы, чтобы построить растровое изображение, помещая каждую букву в свою ячейку. Что касается Y-позиционирования, все базовые линии должны быть выровнены. Если некоторые символы шире других, вы можете выбрать центрирование или выравнивание по левому краю каждого символа в его ячейке. (У каждого из них есть свои странности - вам действительно понадобится шрифт фиксированной ширины для roguelike.)

Дополнительные советы:

  • Используйте сглаживание. Это сделает ваш шрифт более приятным для глаз, чем чистый монохромный.
  • Не используйте цвет, визуализируйте шрифт в оттенках серого. libtcod имеет функции для генерации цветного текста из вашей шкалы шрифтов в градациях серого.
  • Подумайте, хотите ли вы квадратный шрифт или нет. Преимущество квадратного шрифта в том, что «круги» в вашем мире рогаликов будут выглядеть на экране как круги. Недостатком является то, что квадратные шрифты обычно «некрасивее» и их труднее читать.
person svk    schedule 10.03.2013
comment
PIL прекрасно отображает шрифты с ImageFont. - person nneonneo; 10.03.2013
comment
Спасибо за ответы! Я попробую это, когда у меня будет возможность. - person Jeremy Darrach; 10.03.2013