绘制文字也是依靠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条)