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

相关推荐
Eric.Lee20212 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Dontla7 分钟前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
qq_529025291 小时前
Torch.gather
python·深度学习·机器学习
数据小爬虫@1 小时前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
終不似少年遊*1 小时前
pyecharts
python·信息可视化·数据分析·学习笔记·pyecharts·使用技巧
Python之栈1 小时前
【无标题】
数据库·python·mysql
袁袁袁袁满2 小时前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程
老大白菜2 小时前
Python 爬虫技术指南
python
古希腊掌管学习的神3 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵