Python之pygame,从入门到精通(四)
使用字头模块
一个游戏,再怎么寒碜也得有文字,俄罗斯方块还有个计分数得呢。pygame可以直接调用系统字体,或者也可以使用TTF字体。为了使用字体,你得先创建一个Font对象,对于系统自带的字体:
my_font = pygame.font.SysFont("arial", 16)
第一个参数是字体名,第二个自然就是大小,一般来说“Arial”字体在很多系统都是存在的,如果找不到的画,就会使用一个默认字体,这个默认字体和灭个操作系统相关,你也可以使用pygame.font.get_fonts()来获取当前系统所有的可用字体。还有一个更好的方法,使用TTF的方法:
my_font = pygame.font.Font("my_font.ttf", 16)
这个语句使用了一个叫做“my_font.ttf”,这个方法之所以好是因为你可以把字体文件随游戏文件一起分发,避免用户机器上没有需要的字体,一旦你创建了一个字体对象,你就可以使用render方法来写字了,然后久能blit到屏幕上:
text_surface = my_font.render("Pyame is cool!", True, (0, 0, 0), (255, 255, 255))
第一个参数是写的文字,第二个参数是个布尔值(代表是否开启抗锯齿),就是说True的话字体会比较平滑,不过相应的速度会有一点点的影响;第三个是字体颜色;第四个是背景色,如果你不想有背景色(也就是透明),那么可以不加这第四个参数。
下面是一个小例子演示下文字的使用,不过并不是显示在屏幕上,而是保存为一个图片文件。
# _*_coding:utf -8 _*_
import pygame
from pygame.locals import *
from sys import exit
pygame.init()
my_name = 'customize'
my_font = pygame.font.SysFont("arial", 64)
name_surface = my_font.render(my_name, True, (0, 0, 0), (255, 255, 255))
pygame.image.save(name_surface, 'name.png')
追加说明一下如何显示中文。简单来说,首先你得用一个可以使用中文的字体,宋体、黑体什么的,或者你可以直接用中文的TTF文件呢,然后文字使用Unicode,即u“中文的文字”。最后不要忘了在源文件里加上一句关于文件编码的“魔法注释”,比如# _*_coding:utf-8_*_
# _*_coding:utf-8_*_
import pygame
from pygame.locals import *
from sys import exit
pygame.init()
screen = pygame.display.set_mode((640, 480), 0, 32)
font = pygame.font.Font('cheny.ttf', 40)
text_surface = font.render(u'欢迎来到阴阳师的世界', True, (100, 20, 80))
x = -text_surface.get_width()
y = 30
background = pygame.image.load('yys1.jpg').convert()
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
screen.blit(background, (0, 0))
x -= 0.2
if x < -text_surface.get_width():
x = 640 - text_surface.get_width()
screen.blit(text_surface, (x, y))
pygame.display.update()
效果:
pygame的错误处理
程序总会出错的,比如当内存用尽的时候Pygame就无法再加载图片,或者文件根本就不存在,再比如下例:
>>> import pygame
>>> screen = pygame.display.set_mode((640, -1))
---------------------------------
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
pygame.error: Cannot set 0 sized display mode
----------------------------------
对付这种错误一个比较好的方法:
try:
screen = pygame.display.set_mode(SCREEN_SIZE)
except pygame.error, e:
print "Can't create the display :-("
print e
exit()
try…except语法在python中是比较常用的,也是python的标准错误捕捉方法。在实际的游戏(或者程序)中,错误的捕捉实在太重要了。
Pygame的基础就到这里,后面我们会进行一些高级的介绍。