《Python游戏编程入门》注-第4章2

《Python游戏编程入门》的"4.2.2 键盘事件"中介绍了通过键盘事件来监听键盘按键的方法。

1 键盘事件

玩家点击键盘中某个按键实际上包含了两个动作:点击按键和释放按键,也就是按键按下和松开。按键按下的对应的事件是KEYDOWN,按键松开对应的事件是KEYUP。监听键盘按键,对这两个事件中的一个进行监听即可。

当玩家点击了键盘上的某个按键后,KEYDOWN和KEYUP事件就会被系统加入到事件队列中;接下来游戏程序从系统的事件队列中取出事件,如果是KEYDOWN和KEYUP事件,则继续判断玩家点击了键盘中的哪个按键,最后游戏程序对不同的按键进行不同的处理,流程如图1所示。

图1 监听键盘按键的流程

2 监听按键的代码实现

2.1 判断按键是否被按下

当从事件队列中获取到KEYDOWN或KEYUP事件,则说明按键被按下,代码如图2所示。

图2 判断按键是否被按下的代码

其中,第15行代码中的elif对事件类型event.type进行判断,如果是KEYDOWN,则说明此时有按键被按下。

注意1 KEYDOWN在pygame.locals中定义。

注意2 也可以监听KEYUP事件。

2.2 判断哪个按键被按下

当监听到玩家按下了按键后,接下来就要判断玩家按下了哪个按键,可以通过两种方法进行判断。

2.2.1 通过按键ID进行判断

通过按键ID进行判断的代码如图3所示。

图3 通过按键ID进行判断的代码

从图3中可以看出,event.key表示按键ID,通过if...elif对event.key的值进行判断,不同取值表示玩家按下了不同的按键,则进行不同的处理。

相关链接1 K_ESCAPE对应Esc按键;K_0~K_9分别对应0-9按键;K_a~K_z分别对应a~z按键;KEY_UP、KEY_DOWN、KEY_LEFT和KEY_RIGHT分别对应上下左右按键。

2.2.2 通过按键名进行判断

通过按键名进行判断的代码如图4所示。

图4 通过按键名进行判断的代码

其中,第16行代码通过pygame.key.name()函数获取到了按键ID对应的按键名,该按键名是字符串类型,保存在变量key_name中;接下来的17-25行代码对按键名key_name进行判断,不同的按键名进行不同的处理。

2.3 按键长按与短按的处理

在某些游戏中,会将长按按键和短按按键设置为不同的功能。可以通过如图5所示的代码进行设置,使得pygame能够重复地响应一个持续被按下的键。

图5 设置pygame能够重复地响应持续按下的键

该函数的参数是一个以毫秒为单位的值,表示第一个KEYDOWN事件在等待10毫秒后,被送到事件队列中。

相关链接2 pygame.key.set_repeat()函数还可以包含第二个参数,第二个参数也是一个以毫秒为单位的值,表示之后的KEYDOWN事件被送到事件队列中的间隔时间。

相关推荐
Sirius.z7 小时前
第R6周:LSTM实现糖尿病探索与预测
python
名字还没想好☜7 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王8 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
Dxy12393102169 小时前
Python 如何使用 MySQL 的事务
python·mysql
今儿敲了吗13 小时前
Python ——第三方包
笔记·python
麒麟水手13 小时前
国产银河麒麟系统开发实录:跑通Streamlit,我踩过的6个坑
python
麒麟水手13 小时前
麒麟系统部署检查清单:上线前30分钟,逐项自查这4类问题
python
用户03321266636714 小时前
使用 Python 在 PDF 中添加或删除数字签名
python
代码方舟15 小时前
零信任架构实战:基于天远柠檬查出险-登记证API构建自动化车辆履约评估网关
人工智能·python·架构·自动化
估值探索者15 小时前
【Python实时盯盘与预警 #08】成交额突然放大2倍?Python窗口比较抓异动
java·开发语言·python