前言
基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。
我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。
私信我发送消息python资料,领取python crash course中文版PDF。
pygame
Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。
事件处理
在pygame中,事件监听是游戏开发中非常关键的一部分,它允许你响应用户的输入和其他系统事件。
pygame使用一个事件队列来管理所有事件,这个队列包含了自从上一次检查以来发生的每一个事件。
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
这块代码大家眼熟不眼熟,基本上我们之前学习的模块中最后都以这个结尾,在窗口那一节的时候也简单讲过这段代码的作用,就是监听事件,假如事件类型是退出的话,调用pygame.quit()退出并清理pygame资源,exit()退出Python程序。
上面的代码就是最简单的事件监听。
接下来我们再仔细讲讲事件监听处理。
获取事件
每次游戏循环迭代时,通常会调用pygame.event.get()来获取并处理这些事件。没循环一次,我们就会根据监听的事件进行处理,根据预定的业务进行响应。
事件类型
我们通常根据事件的类型来判定我们需要响应的业务,并通过编写代码完成业务。
在pygame中,包含以下常用的类型:
- pygame.QUIT: 当用户关闭窗口时触发。
- pygame.KEYDOWN 和 pygame.KEYUP: 分别在按键按下和释放时触发。
- pygame.MOUSEBUTTONDOWN, pygame.MOUSEBUTTONUP, pygame.MOUSEMOTION: 分别在鼠标按钮按下、释放和鼠标移动时触发。
这个几个类型,大家一看就知道能干嘛。这里就简单讲一下。
其实就是对常用操作的一些归纳,方便我们进行响应。比如我们监听到这次的事件类型是QUIT,业务代码就是清理资源,退出程序。
按键按下和鼠标按下移动都需要结合事件的属性,获取到确定的属性值后进行对应的业务处理。
比如按钮按下,我们需要根据属性值,获取按下的键是哪个,如果是空格,我们可以编写音乐暂停,游戏暂停的业务代码,假如是上下左右键,我们可以编写上一首下一首音量加减或者游戏人物前后左右移动的业务代码。
比如鼠标按下,我们同样根据属性值获取鼠标按下位置的坐标,假入是任务,进行人物对话触发的业务代码编写,假如是空白的地方,无响应或者进行人物移动的业务代码编写。
事件属性
获取事件属性 每个事件都有特定的属性,如event.pos可以获取鼠标事件的位置,event.key可以获取按键事件的键值。
事件队列清理
在处理完所有事件后,pygame.event.get()会自动从队列中移除已经处理过的事件。如果不需要处理某些类型的事件,可以传递事件类型作为参数给pygame.event.get()来过滤它们。
自定义事件
除了标准事件,你还可以定义自己的事件,使用pygame.USEREVENT加上一个整数来标识。
等待事件
如果你想让程序暂停直到某个事件发生,可以使用pygame.event.wait()。
代码示例
暂停播放与继续播放
接下来,我们通过代码来实现音乐的播放与暂停。
import pygame
pygame.init()
pygame.mixer.init()
# 没啥用的窗口,单纯为了关闭窗口退出音乐播放
screen = pygame.display.set_mode((1200, 800))
# 加载音乐
pygame.mixer.music.load('../day21/叶倩文 - 情人知己.wav')
# 播放
pygame