Pygame库学习记录
Published:
在学习强化学习的工程中,需要用到Pygame来搭建自己的虚拟仿真环境,因此记录一下学习过程。 这篇博客主要介绍了Pygame库经常用到的API,方便使用时查找。
Pygame库的介绍
顾名思义,Pygame 是一个专门用来开发游戏的 Python 模块,主要为开发、设计 2D 电子游戏而生,它是一个免费、开源的第三方软件包,支持多种操作系统,具有良好的跨平台性(比如 Windows、Linux、Mac 等)。Pygame 是 Pete Shinners 在 SDL(Simple DirectMedia Layer,一套开源的跨平台多媒体开发库)基础上开发而来。官方网址:https://www.pygame.org/
Pygame的下载和安装
这是最为轻便的一种安装方式,推荐使用 3.7 以上版本。在终端输入以下命令即可成功安装:
pip install pygame
上述安装方法同样适用于 Linux 和 Mac 操作系统。
Pygame的基本使用
下面是一个简单的 Pygame 程序,如下所示:
#导入所需的模块
import sys
import pygame
# 设置主屏窗口的尺寸
screen_width = 600
screen_height = 400
# 使用pygame之前必须初始化
pygame.init()
# 设置主屏窗口
screen = pygame.display.set_mode((screen_width, screen_height))
# 设置窗口的标题,即游戏名称
pygame.display.set_caption('hello world')
# 引入字体类型
f = pygame.font.Font('simhei.ttf', 50)
# 生成文本信息,第一个参数文本内容;第二个参数,字体是否平滑;
# 第三个参数,RGB模式的字体颜色;第四个参数,RGB模式字体背景颜色;
text = f.render("贪吃蛇",True,(255, 0, 0),(0, 0, 0))
#获得显示对象的rect区域坐标
textRect =text.get_rect()
# 设置显示对象居中
textRect.center = (screen_width//2, screen_height//2)
# 将准备好的文本信息,绘制到主屏幕 Screen 上。
screen.blit(text,textRect)
# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
while True:
# 循环获取事件,监听事件状态
for event in pygame.event.get():
# 判断用户是否点了"X"关闭按钮,并执行if代码段
if event.type == pygame.QUIT:
#卸载所有模块
pygame.quit()
#终止程序,确保退出程序
sys.exit()
#更新屏幕内容
pygame.display.flip()
创建Surface对象
想要掌握 Pygame 的编程逻辑,首先就要理解 surface 对象的概念,它是 Pygame 中最重要的组成部分。
在 Pygame 中,可以把 surface 对象理解成一张“白纸”,通过这张纸可以做许多的事情,比如在纸上添加文字、填充颜色、添加图片以及绘制任意形状的图形等。既然是“纸”就有规格尺寸,Pygame 允许您创建任意大小的纸。
那么我们应该如何创建 Surface 对象呢?Pygame 提供了多种创建 Surface 对象的方法,这里先介绍以下几种方法。
上述示例,使用如下方式创建了一个 surface 对象:
# 也叫screen对象,本质上是一个Surface,大小400*400
screen = pygame.display.set_mode((400,400))
screen 的本质上就是一个 Surface 对象,它是游戏的主窗口,也就是整个游戏中尺寸最大的“纸”,任何其他的 Surface 对象都需要附着在这张最大的“纸”上,比如创建一个包含文本的 Surface 对象,通过以下方法将它绘制在主屏幕上。 如果想创建一个包含图像的 surface 对象可以使用如下方法:
surface_image =pygame.image.load("图片路径")
gfxdraw
tips: 部分函数如画圆、画椭圆、画扇形、画三角形等会出现锯齿,这时候同时使用画抗锯齿的形状的框和填充该形状可以抗锯齿。
- pygame.gfxdraw.pixel(surface, x, y, color) -> None 参数解释: surface: surface对象, x, y: 坐标, color: 颜色(RGB元组) 作用: 画点
- pygame.gfxdraw.hline(surface, x1, x2, y, color) -> None 参数解释: surface: surface对象, x1, x2: 坐标, y: 横坐标, color: 颜色(RGB元组) 作用: 画横线
- pygame.gfxdraw.vline(surface, x, y1, y2, color) -> None 参数解释: surface: surface对象, x: 坐标, y1, y2: 纵坐标, color: 颜色(RGB元组) 作用: 画竖线
- pygame.gfxdraw.line(surface, x1, y1, x2, y2, color) -> None 参数解释: surface: surface对象, x1, y1, x2, y2: 坐标, color: 颜色(RGB元组) 作用: 画直线
- pygame.gfxdraw.rectangle(surface, rect, color) -> None 参数解释: surface: surface对象, rect: 矩形(如[(0,0), (20,20)]), color: 颜色(RGB元组) 作用: 画矩形框
- pygame.gfxdraw.box(surface, rect, color) -> None 参数解释: surface: surface对象, rect: 矩形(如[(0,0), (20,20)]), color: 颜色(RGB元组) 作用: 画填充的矩形
- pygame.gfxdraw.aacircle(surface, x, y, r, color) -> None 参数解释: surface: surface对象, x, y: 圆心坐标, r: 半径, color: 颜色(RGB元组) 作用: 画抗锯齿的圆
- pygame.gfxdraw.filled_circle(surface, x, y, r, color) -> None 参数解释: surface: surface对象, x, y: 圆心坐标, rx, ry: 圆的宽高, color: 颜色(RGB元组) 作用: 画填充的圆
- pygame.gfxdraw.aaellipse(surface, x, y, rx, ry, color) -> None 参数解释: surface: surface对象, x, y: 圆心坐标, rx, ry: 椭圆的x, y轴半径, color: 颜色(RGB元组) 作用: 画抗锯齿的椭圆
- pygame.gfxdraw.filled_ellipse(surface, x, y, rx, ry, color) -> None 参数解释: surface: surface对象, x, y: 圆心坐标, rx, ry: 椭圆的x, y轴半径, color: 颜色(RGB元组) 作用: 画填充的椭圆
