Pygame中监控键盘按键的方法

1 事件与队列

在Pygame中,将用户对游戏的操作叫做“事件”。键盘按键是一种事件,鼠标点击和游戏手柄的输入也是一种事件。在Pygame的子模块locals中,对这些事件进行了定义。当用户通过键盘、鼠标或者游戏手柄对游戏进行操作后,产生的这些事件都会被放在队列中。

2 获取键盘按键的基本原理

在Pygame中获取按键的基本原理就是从队列中取出这些事件,如果是键盘事件,则继续判断用户按下的是哪个键,根据不同的按键进行不同的处理。

3 代码实现

3.1 模块导入

需要导入Pygame模块以及Pygame模块下的locals子模块,代码如下所示:

import pygame
from pygame.locals import *

3.2 从队列中取出事件

从队列中取出事件的代码如下所示:

while True:for event in pygame.event.get():

其中,while True语句表示在游戏运行过程当中,能够不断地获取用户产生的事件;pygame.event.get()函数的作用是从队列中取出所有的事件,并将其保存到变量event中。

3.3 判断是否是键盘事件

在while循环中,对获取到的事件event进行判断,代码如下所示:

if event.type == KEYUP:

其中,event.type表示事件的类型,KEYUP在pygame.locals中定义,表示键盘中的某个键被按下。

3.4 根据不同的按键进行不同的处理

当判断出是键盘按键事件后,接下来判断用户按下的是键盘中的哪个按键,根据不同的按键进行不同的处理。我们要实现的功能是用户按下按键中的数字1键,则在屏幕上显示数字1;按下的是数字2键,则显示数字2,以此类推。代码如下所示:

if  event.key == pygame.K_1:number = '1'
elif event.key == pygame.K_2:number = '2'
elif event.key == pygame.K_3:number = '3'
elif event.key == pygame.K_4:
number = '4'

其中,event.key表示按键对应的值,pygame.K_1到pygame_K_4分别表示数字1键到数字4键对应的值。变量number是要显示的内容。

3.4 创建屏幕和要显示的内容

请参考《Pygame显示文字》。

4 完整代码

在Pygame中获取键盘输入的完整代码如下所示:i

import pygame
from pygame.locals import *
import syspygame.init()
screen = pygame.display.set_mode((600,500))
font = pygame.font.Font(None, 100)
number = '0'while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == KEYUP:if event.key == pygame.K_ESCAPE:sys.exit()elif event.key == pygame.K_1:number = '1'elif event.key == pygame.K_2:number = '2'elif event.key == pygame.K_3:number = '3'elif event.key == pygame.K_4:number = '4'elif event.key == pygame.K_RETURN:number = 'RETURN'screen.fill((0,0,200))imgText = font.render(number, True, (255,255,255))screen.blit(imgText, (300, 200))pygame.display.update()

运行该代码后,当按下1~4这四个数字键,在屏幕中就会显示相应的数字,如图1所示。

图1 显示按键对应的数字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot项目部署(Docker)——通过Dockerfile将打包好的jar包创建成镜像 在IDEA中配置docker,一键启动容器 用swagger进行测试

目录 引出SpringBoot项目部署(jar包)Dockefile初识idea配置docker在Linux中配置docker remote api配置idea docker插件 部署项目Springboot整合Dockerfile准备项目创建Dockerfile文件进行测试 总结 引出 1.Dockerfile命令初识,CMD…; 2.idea配…

Fiddler抓取HTTPS最全(强)攻略

对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler。可是在初学时,大家对于fiddler如何抓取HTTPS真是伤了脑筋,可能你一步步按着网上的帖子成功了,那当然是极好的。 有可能没有成功,这时候你就很抓狂了&#xff…

Unity3D Shader 之透视效果XRay

1、 Shader "Unlit/XRay" {Properties{_MainTex("Texture", 2D) "white" {}// 漫反射_Diffuse("Diffuse", COLOR) (1,1,1,1)// XRay 效果_XRayColor("XRay Color", COLOR) (0,1,1,1)_XRayPower("XRay Power",…

Mysql 将表里的两列值数据互换

示例: 需要将表中的 两个订单号互换 方案: 将同一张表数据做 临时数据 和主表 做数据交互 。 update 表 as main, 表 as temp set main.bill_no temp.track_bill_no, main.track_bill_no temp.bill_no where main.id temp.id…

新手小白如何搭建自己的服务器

由于近期六年前的域名到期了,阿里云的客服电话,正好提醒了我需要管理下这方面的东西, 正好看到阿里云的服务器99/年,而且可以原价续费两年,截止日期为2026年3月,所以我还是剁手了。 借着这次机会写一部分建…

分布式(7)

目录 31.基于Zookeeper如何实现分布式锁? 32.什么是ACID? 33.什么是分布式的XA协议? 34.什么是2PC? 35.什么是3PC? 31.基于Zookeeper如何实现分布式锁? 顺序节点 创建一个用于发号的节点“/test/lock…

应用在游戏机触摸屏中的触摸感应芯片

触屏游戏机的屏幕是由液晶屏和触控层组成的。触控层分为电容式触屏和电阻式触屏两种。电容式触屏是将悬空电极和屏幕玻璃上的电极组成静电场,当人体接近屏幕时,就会改变静电场分布,从而实现触摸的位置探测。而电阻式触屏则是利用玻璃上的两层电极之间通电形成一个电阻值,当手指…

【python入门】day19:学生管理系统需求分析、系统设计、主函数设计

需求分析 应具备功能—— 添加学生及成绩信息; 将学生信息保存到文件中; 修改和删除学生信息; 查询学生信息; 根据学生成绩进行排序; 统计学生的总分 系统设计 1.录入学生信息模块 2.查找 3.删除 4.修改 5.成绩排名…

数据分析求职-简历准备

简历在整个求职过程中的重要性不言而喻,今天咱们来聊求职过程中简历准备的那些事儿~ 1. 简历究竟有啥用 求职的流程简单说就是:网申->笔试->面试->offer 其中网申环节,简历100%决定了你的通过与否,这个点大家都知道。…

计算机Java项目|Springboot+vue 学生心理咨询评估系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

数据结构入门到入土——ArrayList与顺序表

目录 一,线性表 二,顺序表 1.接口实现 三,ArrayList简介 四,ArrayList使用 1.ArrayList的构造 2.ArrayList常见操作 3.ArrayList的遍历 4.ArrayList的扩容机制 五,ArrayLisit的具体使用 杨辉三角 一&#x…

linux 使用log4cpp记录项目日志

为什么要用log4cpp记录项目日志 在通常情况下,Linux/UNIX 每个程序在开始运行的时刻,都会打开 3 个已经打开的 stream. 分别用来输入,输出,打印错误信息。通常他们会被连接到用户终端。这 3 个句柄的类型为指向 FILE 的指针。可以…

【保研记录】2023年(24届)SE上岸经历

先开个坑,慢慢填~ 个人信息 学校:某双非 专业:软件工程 第四轮学科评估:无(对就是没有等级) 排名:1/400 竞赛/荣誉:国奖x2,省三好,大英国二,…

视频剪辑方法:一键批量转码,视频转GIF教程详解

在数字媒体时代,视频剪辑已经成为一项必备技能。无论是专业人士还是普通用户,都要对视频进行剪辑、转码和制作。但是视频剪辑并不简单,要掌握一定的技巧和知识。下面一起来看云炫AI智剪简单易学的视频剪辑方法:一键批量转码和视频…

案例093:基于微信小程序的南宁周边乡村游设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

【MATLAB】【数字信号处理】线性卷积和抽样定理

已知有限长序列:xk1,2,1,1,0,-3, hk[1,-1,1] , 计算离散卷积和ykxk*h(k) 。 程序如下: function [t,x] My_conv(x1,x2,t1,t2,dt) %文件名与函数名对应 %自写的卷积函数 x conv(x1,x2)*dt; t0 t1(1) t2(1); L length(x1) length(x2)-2; t t0:dt…

thinkphp6入门(14)-- 多关联模型查询

背景: 有3个数据表,一个User表,一个Cloth表,一个Shoe表。 Cloth表和Shoe表分别和User表通过user_id关联。 thinkphp 6中如何通过模型查询所有用户,其中包括每个用户的cloth和shoe。 多关联模型查询: 1.…

Qt6学习笔记:对象树

使用QObject及其子类创建的对象是以对象树的形式来组织的。创建一个QObject对象时若设置一个父对象,它就会被添加到父对象的子对象列表里,一个父对象被删除时,其全部的子对象都会自动删除。QObject类的构造函数里有一个参数用于设置对象的父对…

CommonJS 和 ES6 Module:一场模块规范的对决(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

python 数据容器

数据容器概念 一个可以存储多个元素的python数据类型 python有的数据容器 list(列表) tuple(元组) str(字符串) set(集合) dct(字典) 列表 python的列表的数据类型可以是不同的 my_list ["1",123,True,[123,"3333",d,False]]for item in my_list:p…