Pygame学习笔记

发布于 2018-12-25  4 次阅读


pygame的极简开发框架

大体思路为:

  1. 引入及初始化

    (1) 导入pygame和sys

    (2)初始化init()及设置

  2. 事件及刷新

    (1)获取事件并对事件做出响应

    (2)刷新屏幕

#用pygame做的游戏框架都是在此基础上扩展的
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((width,height),flag,depth)
whiel True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      sys.exit()
    pygame.display.update()
函数 功能
pygame.init() 对pygame的各种功能模块进行初始化创建及变量设置,必须调用
pygame.display.set_mode((width,height),flag,depth) 创建一个Surface对象
pygame.event.get() 获取所有事件,用for循环进行遍历后判断event的type,再进行相关操作
pygame.display.update() 更新有改动的surface

用pygame做的游戏图形的绘制都是对Surface对象来操作再blit在屏幕上,Surface对象理解起来有点像Photoshop里面的图层问题,也可以简单的吧surface对象理解成图层,游戏中呈现不同的画面只是不同的surface放在主图层上而已,且创建的Surface都采用笛卡尔坐标系,左上角(0,0),竖Y横X

python的方便在于第三方库的丰富,在我们需要用的时候可import,由于一些第三方包没有自带,像pygame和request、BeautifulSoup4等第三方库是我们需要去下载的,相关教程上网挺多的,就不介绍了,当然也有自带的库,sys就是个例子


常用语句

函数 功能
pygame.image.load(src) 载入图片 支持jpg,png,gif等13种图片格式,补充一点,无论背景颜色是什么,移动后所在的窗体,系统会自动填充白色
object.get_rect() 生成一个可包围Object的矩形
Object.get_rect.move(x轴的speed,y轴的speed) #对矩形以给定的速度向x,y轴移动
surface.blit(src,dest(目标位置)) 其他移动变色等操作只是针对于矩形这个框,如果有设置图片,想要所设置的图形跟上矩形,就需要blit()了
surface.fill(color) color采用RGB体系,对surface进行颜色填充
pygame.time.Clock() 创建一个Clock对象,用于操作时间

控制帧的刷新速度,clock.tick(100)表示每秒最多或只进行100次的帧刷新(帧为窗口的刷新速度,图像概念)
ClockObject.tick(framerate)

屏幕相关

函数 功能
屏幕尺寸和模式 pygame.display.set_mode((宽,高),flags=0,) 设置相关屏幕模式,flags可选pygame.RESIZABLE(窗口可调)/FULLSCREEN(全屏)/NOFRAME(无边框)
pygame.display.Info() 生成屏幕相关信息,其中current_w/cerrent_h(当前的窗口的像素宽和高)是相对较重要的
2.窗口标题和图标 pygame.display.set_caption() 设置标题信息
pygame.display.set_icon() 设置图标信息
pygame.display.get_caption() 获得图标
3.窗口感知和刷新 pygame.display.get_active() 当窗口在系统种显示则放回True,否者返回False,可利用此功能进行暂停游戏,改变响应模式等
pygame.display.flip() 重新绘制整个屏幕的窗口
pygame.display.update() 重新绘制窗口种由变化的部分 当窗口大小变动时,触发事件Pygame.VIDEORESIZE,这是一种窗口更改事件,返回一个event.size元组,包含新窗口的width和height,可用.size[0]/[1]或者event.w/h来获取新的大小

色彩与机制

1.色彩机制

pygame.Color() 颜色可采用RGB(红绿蓝,范围0-255)、RGBA(在RGB基础的扩展,增加了A,即alpha,表示不透明度,范围0-255,越大表示不透明度越高)、色彩英文名、HTML色值
pygame.Color类还提供许多方法,pygame.Color.r表示红色值,以此类推,还有pygame.Color.normalize将个RGBA值归一到0-1之间的浮点数

2.图形绘制机制

pygame.draw类分需要方法来绘制图形,参数有(Surface,color,Rect,width=0)这里的Surface是要绘制的区域的Surface,color即矩形颜色,Rect是绘制的区域,width是该矩形的border大小,默认为0,即填充。不同方法的参数不同,但区别不大,不管是不规则还是规则图形,最终都返回矩形以rect类来表示,rect类仅储存矩形的信息,由四个参数,left,top,height,width。rect类的属性则较多,也提供许多方法,如.move().copy()等,详情查看 pygameRect类 文档

3.文字绘制机制

pygame.freetype向屏幕打印特定字体的文字,在这之前我学到的是用pygame.font.SysFont(font_name,size)这个语句来表达文字,但后来发现这个语句不能打印中文,看了嵩天老师的视频后发现了pygema.freetype这个语句,freetype是一个特殊的库,能帮助pygame将文字绘制在屏幕上,需要额外的import,先import pygame之后,再import pygame.freetype,一般情况下C盘WINDOWS下的Fonts有不同字体,也可网上下载自己喜欢的字体后缀为.ttf.ttc,其实用方法是根据字体和大小,使用pygame.freetype的时候需要先pygame.freetype.Font生成一个Font对象,再用Font.render_to()或Font.render()将具体文字绘制在屏幕上,Font类的参数有file(名称或者路径)跟size(默认为0)等,最终返回一个Rect类型(render返回一个元祖对象,里面有Rect和一个Surface对象,最终需要bilt其Surface)具体查看pygame文档

4.绘制的原理和精髓!!!!!

Surface(或者叫图层)类型,Rect类型这个两个类型的区别和联系,一个屏幕只能有一个主图层(由pygame.display.set_mode()生成的Surface则为主图层),主图层是被显示出来的那一个,图层是能和主图层并列存在的,Rect类型表示一个矩形区,是主图层上的某个区域,如果需要其他图层的区域显示再主图层之上,就需要用到.blit(),.blit有两个参数,一个是所在的图层,一个是要绘制的主图层区域

学习资料

pygame文档
MOOC嵩天老师python入门游戏开发