Как я могу отображать китайские иероглифы в PyGame? И какой хороший бесплатный шрифт использовать для этой цели?
Китайские шрифты Unicode в PyGame
Ответы (3)
pygame использует SDL_ttf для рендеринга, поэтому вы должны быть в хорошей форме, когда рендеринг идет.
На сайте unifont.org имеются обширные ресурсы по шрифтам с открытым исходным кодом для ряда шрифтов.
Я взял пан-юникодный шрифт Cyberbit и извлек прилагаемый файл ttf. На моей машине работало следующее: Windows Vista Home Basic и Python 2.6:
# -*- coding: utf-8 -*-
import pygame, sys
unistr = u"黒澤 明"
pygame.font.init()
srf = pygame.display.set_mode((640,480))
f = pygame.font.Font("Cyberbit.ttf",20)
srf.blit(f.render(unistr,True,(0,0,0)),(0,0))
pygame.display.flip()
while True:
srf.blit(f.render(unistr,True,(255,255,255)),(0,0))
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
sys.exit()
Пока вы просто отображаете текст Unicode, вы должны быть в фантастической форме. Если, однако, вы хотите на самом деле прочитать ввод юникода от пользователя, ситуация будет гораздо более мрачной. Pygame не имеет никаких методов ввода.
input()
, но поверх этого должна быть возможность создавать элементы ввода пользовательского интерфейса. Также, похоже, есть поддержка вырезания и вставки через pygame.scrap
.
- person SwiftsNamesake; 06.01.2015
Насколько мне известно — и я сам не пробовал — PyGame должен просто работать, когда вы передаете ему строку Unicode, содержащую китайские символы, например. u'中国'.
См. раздел «Восточная Азия» на странице http://www.unifont.org/fontguide/ для несколько подходящих шрифтов с открытой лицензией.
Вот список встроенных шрифтов в pygame
, которые могут отображать китайский язык:
arialms
fzshuti
fzyaoti
lisu
malgungothic
microsoftjhengheimicrosoftjhengheiui
microsoftjhengheimicrosoftjhengheiuibold
microsoftjhengheimicrosoftjhengheiuilight
microsoftyaheimicrosoftyaheiui
microsoftyaheimicrosoftyaheiuibold
microsoftyaheimicrosoftyaheiuilight
msgothicmsuigothicmspgothic
simsunnsimsun
stcaiyun
stfangsong
sthupo
stkaiti
stliti
stsong
stxihei
stxingkai
stxinwei
stzhongsong
youyuan
yugothicmediumyugothicuiregular
yugothicregularyugothicuisemilight
yugothicyugothicuilight
yugothicyugothicuisemiboldyugothicuibold
Каждый из вышеперечисленных шрифтов работает с китайскими иероглифами. Вот пример с "stsong"
:
import pygame
text = "中文"
font = "stsong"
pygame.font.init()
wn = pygame.display.set_mode((500, 500))
font = pygame.font.SysFont(font, 190)
wn.blit(font.render(text, True, (255, 255, 255)), (50, 50))
pygame.display.update()
Выход: