《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事件被送到事件队列中的间隔时间。

相关推荐
V搜xhliang0246几秒前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
李崧正22 分钟前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
BIGmustang26 分钟前
python练手之用tkinter写一个计算器
开发语言·python
WL_Aurora40 分钟前
Python 算法基础篇之链表
python·算法·链表
曲幽1 小时前
FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60%
python·fastapi·web·routes·depends·prefix·apiroute
qiaozhangchi1 小时前
求解器学习笔记
笔记·python·学习
kexnjdcncnxjs1 小时前
Redis如何记录每一次写操作_开启AOF持久化机制实现命令级追加记录
jvm·数据库·python
程序媛徐师姐1 小时前
Python基于Django的小区果蔬预定系统【附源码、文档说明】
python·django·小区果蔬预定系统·果蔬预定·python小区果蔬预定系统·小区果蔬预定·python果蔬预定系统
小何code2 小时前
人工智能【第8篇】监督学习实战:线性回归与逻辑回归算法详解(万字长文+完整代码实现)
人工智能·python·学习·机器学习·逻辑回归·线性回归