用python和pygame游戏编程入门-显示文字

上一节我们通过键盘可以控制角色移动,如果要让角色说话,那就要用到文字显示。Pygame可以直接调用系统字体,或者也可以使用TTF字体,TTF就是字体文件,可以从网上下载。为了使用字体,你得先创建一个Font对象,对于系统自带的字体:

my_font = pygame.font.SysFont("arial", 16)

第一个参数是字体名,第二个自然就是大小,一般来说“Arial”字体在很多系统都是存在的,如果找不到的话,就会使用一个默认的字体,你也可以使用pygame.font.get_fonts()来获得当前系统所有可用字体。

一旦你创建了一个font对象,你就可以使用render方法来写字了,然后就能blit到屏幕上:

text_surface = my_font.render("Pygame is cool!", True, (0,0,0), (255, 255, 255))

第一个参数是写的文字;第二个参数是个布尔值,以为这是否开启抗锯齿,就是说True的话字体会比较平滑,不过相应的速度有一点点影响;第三个参数是字体的颜色;第四个是背景色,如果你想没有背景色(也就是透明),那么可以不加这第四个参数。

下面我们来修改上一节的程序,加上一个文字跟随章鱼移动:

#!/usr/bin/env python
#指定图像文件名称
background_image_filename = './img/Underwater.png'
mouse_image_filename = './img/octopus.png'
import pygame
from pygame.locals import *
from sys import exit
#初始化pygame,为使用硬件做准备
pygame.init()
print(pygame.font.get_fonts())#查看系统支持的字体
font = pygame.font.SysFont("华文楷体", 20)
text_surface= font.render("Hello!", True, (255, 255, 255))
#text_surface = font.render(u"你好啊,我是老章!", True, (255, 255, 255))

 #创建了一个窗口
screen = pygame.display.set_mode((960, 720), 0, 32)
#设置窗口标题
pygame.display.set_caption("海底世界")
#加载并转换图像
background = pygame.image.load(background_image_filename).convert()
kcursor = pygame.image.load(mouse_image_filename).convert_alpha()
#游戏主循环
x, y = 0, 0
move_x, move_y = 0, 0
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
           exit()
        if event.type == KEYDOWN:
            #键盘有按下?
            if event.key == K_LEFT:
                #按下的是左方向键的话,把x坐标减一
                move_x = -1
            elif event.key == K_RIGHT:
                #右方向键则加一
                move_x = 1
            elif event.key == K_UP:
                #类似了
                move_y = -1
            elif event.key == K_DOWN:
                move_y = 1
        elif event.type == KEYUP:
            #如果用户放开了键盘,图就不要动了
            move_x = 0
            move_y = 0
    #计算出新的坐标
    x+= move_x
    y+= move_y
    
    screen.fill((0,0,0))
    screen.blit(background, (0,0))
    screen.blit(kcursor, (x,y))
    screen.blit(text_surface, (x, y))
    #在新的位置上画图
    pygame.display.update()

如何显示中文?

简单来说,首先你得用一个可以使用中文的字体,宋体、黑体什么的,然后文字使用unicode,即u”中文的文字”这种

text_surface = font.render(u"你好啊,我是老章!", True, (255, 255, 255))

这样就可以显示出中文了,上面的代码有注释,可以试试看。

本站内容未经许可,禁止任何网站及个人进行转载。