更新时间:2022-12-22 来源:黑马程序员 浏览量:

游戏需要与玩家交互,因此它必须能够接收玩家的操作,并根据玩家操作有针对性地做出响应。程序开发中将玩家会对游戏进行的操作称为事件(Event),根据输入媒介的不同,游戏中的事件分为键盘事件、鼠标事件和手柄事件等。pygame在子模块locals中对事件进行了更加细致的定义,键盘事件、鼠标事件及其产生途径和参数如下表所示。

由表上表可知,pygame.locals中的键盘事件分为KEYDOWN和KEYUP.这两个事件的参数描述如下。
(1)unicode:记录按键的Unicode值。
(2)key:按下或放开的键的键值,键值是一个数字,但为了方便使用,pygame中支持以K_xx来表示按键,例如,字母键表示为K_a、K_b等,方向键表示为K_UP、K_DOWN、K_LEFT、K_RIGHT,ESC键表示为K_ESCAPE(更多按键表示请参见pygame手册)。
(3)mod:包含组合键信息,例如mod&KMOD_CTRL为真,表示用户在按下其他键的同时按下了Ctrl键。类似的还有KMOD_SHIFT、KMOD_ALT。
Pygame.locals中的鼠标事件分为MOUSEMOTION、MOUSEBUTTONDOWN、MOU SEBUTTONUP,这3个事件的参数描述如下。
(l)pos:鼠标操作的位置,该参数是一个包含横坐标x和纵坐标y的元组。
(2)rel:当前位置与上次产生鼠标事件时鼠标指针位置间的距离。
(3)buttons:一个含有3个数字的元组,元组中数字的取值只能为0或1,3个数字依次表示左键、滚轮和右键。若仅移动鼠标,则buttons的值为(1,0,0);若鼠标移动的同时单击鼠标的某个按键,元组中与该键对应的值更改为1,例如按下鼠标左键,buttons的值为(1,0,0)。
(4)button:整型数值,1表示单击鼠标左键,2表示单击滚轮,3表示单击右键,4表示向上滑动滚轮,5表示向下滑动滚轮。
程序可通过pygame子模块event中的type属性判断事件类型,通过get()函数获取当前时刻产生的所有事件的列表。当然,并非事件列表中的事件都需要关心和处理,程序通常在循环中遍历事件列表,将其中的元素与需要处理的事件常量进行比对,若当前事件为需要处理的事件,再对其进行相应操作。
在程序7_pg_test.py中添加事件处理代码,具体如下所示:
````
#获取点击事件,rect.collodepoint(),判断点击位置
while True:
FPSCLOCK.tick (FPS)
for event in pygame.event.get():
if event.type == MOUSEBUTTONUP: #如果有鼠标放开事件
if blockRect.collidepoint(event.pos): #净如果点击的是方块
print('点击了方块')
elif autoRect.collidepoint (event.pos):
print('点击了按钮')
else:
print('点击了空白区域')
elif event.type == KEYUP:#如果有按键放开事件
if event.key in (K_LEFT,K_a):
print('←')
elif event.key in (K_RIGHT, K_d):
print('→')
elif event.key in (K_UP, K_w):
print('↑')
elif event.key in (K_DOWN, K_s):
print('↓')
elif event.key ==K_ESCAPE:
print('退出游戏')
pygame.quit()
pygame.quit()以上代码在while循环中通过for 循环遍历事件,对每层for循环取出的事件event进行判断,若当前事件为鼠标放开事件(MOUSEBUTTONUP),说明鼠标按键曾被按下,此时使用Rect类的collidepoint()方法判断点击的位置event.pos与方块、按钮的关系,输出相应信息;若当前事件为按键放开事件(KEYUP),说明键盘按键曾被按下,此时根据event.key属性判断曾被按下的具体按键,根据按键打印相应的信息,或退出程序。执行程序,依次执行循环中的判断条件,程序打印结果如下:
·pypygame 1.9.4 Hello from the pygame community. https://www.pygame.org/contribute.html <rect (290, 210, 60, 60)> 点击了方块 点击了按钮 点击了空白区域 退出游戏 ← → ↑ ↓
此处的示例仅为展示游戏开发中的事件处理流程,并未详细讲解如何选择要处理的事件以及事件的详细处理,皆因需求决定程序走向,程序代码总是与程序的功能息息相关。
黑马程序员 AI 运维|大厂师资 + 全程服务,3.5 个月实现零基础高薪就业
2026-04-09黑马程序员 AI 运维|10 大就业方向 + 90%+ 就业率,解锁高薪职业路径
2026-04-09黑马程序员 AI 运维|10 大企业级项目实战,毕业即具备独立运维能力
2026-04-09黑马程序员 AI 运维|10 大技术阶段 + 10 大实战项目,从 Linux 到 AI 大模型运维全掌握
2026-04-09黑马程序员 AI 运维|云原生 + 大模型 + 信创三位一体,培养企业紧缺复合型运维人才
2026-04-09黑马程序员AI测试|上市品牌背书,实战赋能,助力冲击年薪30万+
2026-04-09