分享

在pygame中显示中文

 昵称QAb6ICvc 2013-01-25

在pygame中显示中文

-
pygame中显示中文最近对python产生了兴趣,进而又对pygame产生了兴趣。我本身对游戏编程就很着迷,而pygame的简单又让我的着迷程度更进了一步。
做一个堂堂的中国人,自然希望在游戏中的文字是中文了,但是在游戏中显示中文似乎没有那么简单。经过一番研究,终于搞清楚怎样在pygame中显示中文了。
下面就以pygame文档中的一段代码为例,介绍如何显示中文。
# -*- coding: gbk -*-
import pygame
from pygame.locals import *
import local2utf8
def main():
# Initialise screen
pygame.init()
screen = pygame.display.set_mode((650, 150))
pygame.display.set_caption((u'基础 pygame 程序').encode('utf-8'))
# Fill background
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((250, 250, 250))
# Display some text
#font = pygame.font.Font(None, 60)  #原始代码,使用默认字体,不能显示中文
#font = pygame.font.Font('../FredGuo/simkai.ttf', 60)  #正确,文件名可以包含路径
#font = pygame.font.Font('楷体', 60)  #错误,name参数应该是字体的文件名
font = pygame.font.SysFont('楷体', 60)  #正确,name参数应该是字体名,并且字符集要与系统的相同
text = font.render(u"Hello 我爱你", 1, (10, 10, 10))  #显示内容必须转换成Unicode,否则中文不能正常显示
textpos = text.get_rect()
textpos.center = background.get_rect().center
background.blit(text, textpos)
# Blit everything to the screen
screen.blit(background, (0, 0))
pygame.display.flip()
# Event loop
while 1:
for event in pygame.event.get():
if event.type == QUIT:
return
screen.blit(background, (0, 0))
pygame.display.flip()
if __name__ == '__main__': main()
代码中的注释说的已经很清楚了,在这里做一下简单的总结:
首先,使窗口的标题显示中文是很简单的,只要将字符集转换成utf-8就可以;
然后,我们说说稍微麻烦些的内容。在pygame中显示文字主要是用Font类,在创建类的实例时就需要指定字体。如果想使用pygame的默认字段只需将None传递Font就可以,但是这样不可以显示中文。
要使用Font显示中文主要有两种方法:一个是使用pygame.font.Font(name, size)来创建新的Font实例,其中name是字体的文件名(.ttf或.ttc文件),可能包含路径,这需要你知道字体文件的存放位置,方便起见,可以将文件copy到程序目录下。另一个方法是使用pygame.font.SysFont(name, size)方法创建Font的实例,它利用系统的可用字体,如果失败会默默地使用pygame的默认字体,其中name是字体的名称(楷体、宋体等);需要注意的是name的字符集要与系统的使用的字符集尽量一致,否则可能出现问题。
在使用Font的render()方法绘制中文时需要注意将字符集转换成Unicode,否则无法正常显示中文。
OK,That’s it。最后需要提醒一下,一定要注意自己文件使用的字符集,因为并不是在文件头指定什么字符集就会自动地用什么字符集保存文件。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多