北京理工大学-Python游戏开发入门学习笔记13

绘制机制原理精髓

pygame.Surface 绘图层,或绘图平面,或图层
用于表示图形、文字或图像的绘制效果,与当前屏幕主图层可以并列存在,如果不绘制在 主图层上,则不会被显示

pygame.Rect 矩形区域
对应于当前主图层的某个具体区域,相当于某个矩形区域的指针或标识信息,可以指定图 层绘制在某个矩形区域

由pygame.display.set_mode()生成的Surface对象为主图层
在主图层上绘制其他图层使用.blit()方法
screen.blit(ball,ballrect)
ball 对应于pygame.Surface
ballrect 对应于pygame.Rect

文字型壁球

import pygame,sys
import pygame.freetype

pygame.init()
size=width,height=600,400
speed=[1,1]    #设置速度
gold=255,251,0
black=0,0,0    #设置刷新的颜色
pos=[230,160]
screen=pygame.display.set_mode(size)
pygame.display.set_caption("壁球文字型")
f1=pygame.freetype.Font("C://Windows//Fonts//msyh.ttc",30)
f1rect=f1.render_to(screen,pos,"Super Hero",fgcolor=gold,size=50)
f2surf,f2rect=f1.render("All Might",fgcolor=gold,size=50)
icon=pygame.image.load(r"D:\Python\Workspace\360wallpaper.jpg")  #设置图标
pygame.display.set_icon(icon)
fps=300           #设置刷新帧的次数
fclock=pygame.time.Clock()    #创建一个Clock对象,用于操作时间
bgcolor=pygame.Color("black")
# 初始化部分完成

def RGBchannel(a):   #设置RGB的值,为整数
    return 0 if a<0 else (255 if a>255 else int(a))
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
    if pos[0]<0 or pos[0]+f1rect.width >width:
        speed[0]=-speed[0]
    if pos[1]<0 or pos[1]+f1rect.height>height:
        speed[1]=-speed[1]
    pos[0]=pos[0]+speed[0]
    pos[1]=pos[1]+speed[1]
    #事件完成

    bgcolor.r = RGBchannel(pos[0]/ width * 255)
    bgcolor.g = RGBchannel(pos[1] / height * 255)
    bgcolor.b = RGBchannel(min(pos[0], pos[1]) / max(pos[0], pos[1], 1) * 255)  # 最大速度不能为0
    screen.fill(bgcolor)
    f1rect = f1.render_to(screen, pos, "Super Hero", fgcolor=gold, size=50)  # 写在刷新之前
    screen.blit(f2surf,(pos[0]+50,pos[1]+50))
    pygame.display.update()     #完成刷新
    fclock.tick(fps)   #控制帧速度,即窗口刷新速度

ps:All Might是一个真正的英雄
ps:学习链接 https://www.icourse163.org/course/BIT-1001873001

你可能感兴趣的:(北京理工大学-Python游戏开发入门学习笔记13)