pygame入门(3)

文字显示

绘制文字也是依靠blit()实现的

获取字体

想要显示文字首先必须创建字体类,即Font类,因此需要事先准备好字体,字体可以是默认字体也可以是来自于系统的字体,也可以来自自己的ttf字体文件

pygame.font.get_default_font()
#查找默认字体的函数
#在前面加个print()可以看到结果
pygame.font.get_fonts()
#获取系统所有字体
#规范输出
# a=0
# for font in pygame.font.get_fonts():
#     print(font, end=" ")
#     a+=1
#     if a%5==0:
#         print("")

关键函数

想要显示文字需要先创建一个字体类

SysFont(name,size,bold=False,italic=Faise)
#name=系统字体名称;size代表字体尺寸;bold代表字体是否加粗,italic代表是否斜体
#返回值为Font类的对象
#实例
font=pygame.font.SysFont("幼圆",18)
如果name=None则此时使用的是系统默认字体

如果想用自己的字体文件,则必须使用Font类的构造函数来创建字体对象

__init__(filename,size)
new_font=pygame.font.Font.__init__()

重点

将文字区域转换为image surface的关键方法:

font类.render(text,antialias,color,background)
#antialias是否打开抗锯齿,color文字颜色,background背景颜色
#实例
text = font.render("测试",True, (255, 0, 0))

在调用render()之前可以调用三种方法设置字体属性

set_underline是设置下划线

使用默认字体显示文字

font=pygame.font.SysFont(None,32)
text=font.render("text",True,(0,0,255))
#or
font=pygame.font.Font(None,32)
text=font.render("text",Trun,(0,0,255))

显示中文需要使用支持中文的字体,也可以是自己的ttf字体文件

实例:

import pygame
import sys
def main():
    pygame.init()
    #游戏窗口大小
    screen=pygame.display.set_mode((600,400))
    #标题
    pygame.display.set_caption("文字显示")
    print("系统默认字体为:"+pygame.font.get_default_font())
    print("系统内含字体:")
    a=0
    for i in pygame.font.get_fonts():
       a+=1
       print(i,end="")
       if a%5==0:
           print("")
    #使用默认字体创建字体类
    font1=pygame.font.SysFont(None,32)
    text1=font1.render("default_font",True,(0,0,255))
    #系统自带字体
    font2=pygame.font.SysFont("华文行楷",48)
    text2_1=font2.render("系统字体:华文行楷",True,(255,0,0))
    text2_2=font2.render("华文行楷",True,(255,0,0),(220,220,220))
    #其他字体
    font3=pygame.font.SysFont("幼圆",48,True,True)
    text3=font3.render("系统字体幼圆加粗斜体",True,(0,0,0))
    #自己的ttf文件加下划线
    font4=pygame.font.Font(None,32)
    font4.set_bold(True)#加粗
    font4.set_italic(True)#斜体
    font4.set_underline(True)#加下划线
    text4=font4.render("customed font",True,(0,128,0))
    while True:
        #游戏循环 点击退出自动退出
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                sys.exit()
        #填充颜色
        screen.fill((255,255,255))
        screen.blit(text1,(200,20))
        screen.blit(text2_1,(80,80))
        screen.blit(text2_2,(320,80))
        screen.blit(text3,(10,170))
        screen.blit(text4,(80,300))
        pygame.display.update()
if __name__=="__main__":
    main()

屏幕显示小结

已经学习了窗口管理,Surface对象,图片,图形与文字的绘制,但是不同功能在pygame的不同模块才能调用所以较为复杂,因此这里小结一下理清脉络

  • 首先是屏幕窗口,它实际上对应了一个display surface,所有需要在屏幕显示的内容都必须事先绘制到该screen上

  • 在screen surface绘制完毕后,内容不会自动显示在屏幕上,而是需要执行pygame.display.flip()或者pygame.display.update()才能生效。

  • 不同的内容对象,其绘制方法也有所不同。

  • 对于颜色的填充,只需要调用screen surface对象的fill()方法即可,它可以把整个screen surface区域或部分区域填充为指定颜色

  • 简单图形调用的是pygame.draw下的相关函数,如pygaem,draw.line()

  • 图片图像则通过pygame.image.load()把图片加载到image surface然后调用screen surface对象的blit()方法把image surface绘制到screen surface上

  • 文字首先要通过一系列方法把文字转换Surface然后调用screen surface对象的blit()方法把该Surface绘制到screen surface上,它和图片的绘制类似。先字体类,然后调用字体类的render(),完成转换后,通过blit()绘制到屏幕上

要点

  • 注意绘制顺序,后绘制的会把先绘制的对象覆盖住,所以一般会先画背景图像

  • 注意及时更新屏幕,如果在循环里有一个不断绘制的图形,会出现重影

  • 记得抵用pygame.display.flip()或pygame.display.update()更新屏幕,这样新绘制的图像才会显示

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#模块导入 import pygame,sys from pygame.locals import* #初始化pygame pygame.init() #设置窗口大小,单位是像素 screen = pygame.display.set_mode((500,400)) #设置背景颜色 screen.fill((0,0,0)) #设置窗口标题 pygame.display.set_caption("你好,我的朋友") # 绘制一条线 pygame.draw.rect(screen, (0,0,0), [0,100,70,40]) #加载图片 img = pygame.image.load("panda.jpg") #初始化图片位置 imgx = 0 imgy = 10 #加载和播放音频 sound = pygame.mixer.Sound('Sound_Of_The_Sea.ogg') sound.play() #加载背景音乐 pygame.mixer.music.load('TEST1.mp3') #播放背景音乐,第一个参数为播放的次数(-1表示无限循环),第二个参数是设置播放的起点(单位为秒) pygame.mixer.music.play(-1, 30.0) #导入文字格式 fontt=pygame.font.Font(None,50) #配置文字 tex=fontt.render("It is boring!!!",True,(0,0,128),(0,255,0)) #显示文字及坐标 texr=tex.get_rect() texr.center=(10,250) #初始化方向 dire = "right" #设置循环 while 1: #绘制文字 screen.blit(tex,texr) screen.fill((0,0,0)) screen.blit(img,(imgx,imgy)) if dire == "right": imgx+=5 if imgx == 380: dire = 'down' elif dire == 'down': imgy += 5 if imgy == 300: dire = 'left' elif dire == 'left': imgx -= 5 if imgx == 10: dire = 'up' elif dire == 'up': imgy -= 5 if imgy == 10: dire = 'right' #获取事件 for ss in pygame.event.get(): #判断事件 if ss.type == QUIT: #退出Pygame pygame.quit() #退出系统 sys.exit() #绘制屏幕内容 pygame.display.update() #设置帧率 pygame.time.delay(10)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值