pygame安装
1 | 安装 |
pygame使用
1 | # 先init初始化,然后编写pygame代码,之后quit释放内存 |
pygame.Rect:绘制矩形
1 | # (x,y)是绘制矩形的起始点,(width,heigh)是绘制矩形的大小 |
pygame.display:绘制游戏主窗口
pygame.display.set_mode():初始化(创建)游戏显示窗口
语法:
set_mode(resolution=(0,0), flags=0, depth=0) –> Surface
作用:
创建游戏显示窗口
参数:
- resolution:指定的是屏幕的宽高,默认创建的窗口大小和屏幕一致
- flags:指定屏幕的附加选项,例如是否全屏,默认不需要传递
- depth:标识颜色的位数,默认自动匹配
返回值:
可以理解为绘制游戏的屏幕
注意:
使用set_mode()方法必须要用变量记录返回结果,因为所有的对象都是基于这个返回结果
pygame.image.load():加载图像数据
背景:
图像文件初始是保存在磁盘上的,如果要使用,第一步需要将其加载到内存中
设计思路:
使用pygame.image.load()加载图像数据,
file_path:是图片的路径
使用游戏屏幕对象,调用blit方法将图像绘制到指定位置
图像对象:是第一步返回的对象
(x, y):是图片放置的位置,当然也可以直接接受Rect方法绘制的对象
调用pygame.display.update()方法更新整个屏幕的显示,不调用则无法展示绘制的图像
pygame.display.update():一次将之前所有的绘制结果更新到屏幕上
小知识:
动画本质上是多张静态图片连续、快速播放的结果,游戏画面也是
利用get_rect()方法可以获得图片的属性
1
2image = pygame.image.load(file_path)
image.get_rect() # 该方法可以返回pygame.Rect(0, 0, 图像宽, 图像高)中的对象
pygame.time:设置屏幕更新
pygame.time.Clock():设置屏幕的绘制速度
背景:
希望将屏幕的绘制速度设定在每秒60帧左右
设计思路;
在游戏初始化时创建一个时钟对象
1
2# 游戏初始化时生成时钟对象
clock = pygame.time.Clock()在游戏循环中让时钟对象调用**tick(帧率)**方法
1
2# 循环体内部执行更新频率为60
clock.tick(60)tick方法会根据上次被调用的时间,自动设置游戏循环中的延时
pygame.time.set_timer(eventid, milliseconds):设置定时任务
作用
- 程序每隔一段时间,都需要去执行一些动作,这时就引入了定时器,它可以创建一个事件
- 可以在游戏循环中使用事件监听的方法捕获到该事件
参数:
- eventid:事件代号,需要基于常量event.USEREVENT来指定(USEREVENT是一个整数,再增加的事件可以使用USEREVENT+1指定,以此类推)
- milliseconds:事件触发的间隔毫秒值
返回值
None
设计思路:
- 使用USEREVENT创建事件
- 定义定时器常量 –> eventid
- 初始化方法中,调用set_timer方法设定定时器事件
- 通过pygame.event.get()获取当前时刻所有的事件列表
- 通过遍历事件列表,判断event.type是否等于eventid,若相等,表示定时器事件发生
- 使用USEREVENT创建事件
pygame.event:监听、处理用户的事件
pygame.event.get():获取用户当前所做动作的列表
背景:
事件event: 用户针对游戏所做的操作
监听:在游戏循环中,判断用户的具体操作。只有捕获到用户具体的操作,才能有针对性的做出响应
返回值:
返回当前时刻,用户所有的操作事件。结果是一个列表
设计思路
1
2
3
4
5
6
7
8
9
10# 以监听事件终止为例
while True:
clock.tick(60)
event_list = pygame.event.get()
for event in event_list:
if event.type == pygame.QUIT:
print("游戏退出")
pygame.quit()
exit() # python中直接终止当前程序,可以直接使用exit()
pygame.sprite:封装类
注意
1 | # 如果一个类的父类不是object,则在重写初始化方法时,一定要先super()一下父类的__init__方法 |
pygame.sprite.Sprite():存储图像数据image和位置rect的对象
1 | # 需要自定义创建精灵,本质上是将精灵的速度、图形进行同意管理 |
pygame.sprite.Group:统一管理Sprite创建的对象们
1 | # 精灵组用于添加精灵类,便于界面图形绘制,切记需要用变量记录其返回值 |
pygame.sprite.groupcollide():检测精灵组们的碰撞
1 | # 检测group1、group2中精灵们是否发生碰撞,发生碰撞后是否销毁碰撞的精灵 |
pygame.sprite.spritecollide():检测某个精灵与精灵组的碰撞
1 | # 检测精灵sprite和精灵组group2中元素是否发生碰撞, |
pygame.key:监控用户事件
event_type:判断用户是否按下具体的按键
备注:该类方法每按一次只能触发一次事件
1 | # 通过遍历事件列表,判断用户是否有按下某个按键 |
pygame.key.get_pressed():获取用户键盘的事件
备注:可以一直安装某个按键,并持续触发该方法
1 | # 返回所有按键的元组。如果某个键被按下,对应的值为1 |
游戏初始化
作业
- (问答)如何安装pygame模块,并验证安装结果是否成功
- (问答)简述pygame代码整体代码结构
- (问答)如何使用pygame绘制一个(200,600)的屏幕对象,绘制的对象含有哪些属性
- (问答)使用Rect绘制时是否需要实例化对象
- (问答)set_mode(resolution=(0,0), flags=0, depth=0) 中参数表示什么含义
- (问答)使用set_mode()方法时有哪些需要注意的地方
- (问答)如何使用一张图片作为游戏的背景,其具体的操作步骤是什么样的
- (问答)在pygame中当加载一张图片到内存中后,我们如何获取它的图片属性
- (问答)如何设置屏幕的刷新帧率,请描述它的实现方式
- (问答)如何设置定时器任务,请简述其实现方式
- (问答)如何监听用户结束任务的操作,请描述其实现方式
- (问答)当继承的类不是object时,其是否需要super().__init__()
- (问答)在pygame中有精灵这一说,试问pygame中精灵主要有什么作用
- (问答)在pygame中有精灵组这一说,试问pygame中精灵组主要有什么作用,并描述一下精灵组在使用过程中的方式
- (问答)描述一下精灵和精灵组的工作流程
- (问答)如何监控精灵组的碰撞
- (问答)如何监控精灵和精灵组的碰撞,且如何针对碰撞做出对精灵的反馈