pygame学习(三)——支持多种类型的事件

大家好!我是码银🥰

欢迎关注🥰:

CSDN:码银

公众号:码银学编程

实时事件循环

为了保证程序的持续刷新、保持打开的状态,我们会创建一个无限循环,通常使用的是while语句,while True:只要while条件保持为真,while语句块中的代码就会重复地执行。

在游戏或图形应用程序中,事件处理是非常关键的。用户可能会进行各种操作,如点击、按键、移动鼠标等,这些都需要被捕获并相应地处理。为了获取这些事件并进行处理,我们会使用这个语句:pygame.event.get()。

pygame.event.get()这段代码将会创建当前等待处理的事件的一个列表,我们使用一个for循环来遍历该列表:for event in pygame.event.get():

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

下面就可以把各个事件“塞”到这个循环里面了:

QUIT事件

 程序必须响应的最常见的事件是QUIT, 当用户关闭窗口的时候会发生该事件(我相信没有人不会用到关闭窗口的“X”吧😆)。

 正确的代码如下:

    for event in pygame.event.get():if event.type == QUIT:sys.exit()

也可以这么写:

while True:for event in pygame.event.get():if event.type in (QUIT,KEYDOWN):sys.exit()

 sys.exit()是python的退出程序,以达到关闭窗口的作用。

在我刚学习这个部分的时候,我就在想凭什么点了x后就一定要关闭程序呢?

看一下:

import pygame #导包
from pygame.locals import*
import sysscreen_width=500
screen_height=400
pygame.init()screen = pygame.display.set_mode(size=(screen_width,screen_height),flags=0)
while True:for event in pygame.event.get():if event.type == QUIT:print("1")

我每按一次“叉叉”就会输出一个“1”,关不了根本关闭不了,要是游戏这么写,想结束这个游戏可费老劲了😂,所以一定要注意书写代码的正确性哦❤️‍🔥

当然 “print("1")” 也可以换成其他的代码,比如是一个打开另一个窗口的代码(询问一下“您是否要关闭本窗口?”)。

键盘事件

KEYUP:当用户释放键盘上的任意键时,会触发此事件(只要你不松手,你就是安全的😎)。

KEYDOWN :当用户按下键盘上的任意键时,会触发此事件(碰上了,契约就达成了,该松手松手吧🤭)。

这里也是一个退出程序,不过多加了一个“ESCAPE”键,也能触发关闭窗口结束程序的效果。 

    for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == KEYUP:if event.key == pygame.K_ESCAPE:sys.exit()

再比如,下面这段代码 使用了“ESC”、“1”、“2”、“3”、“4”、“Enter”键。

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:trivia.handle_input(1)elif event.key == pygame.K_2:trivia.handle_input(2)elif event.key == pygame.K_3:trivia.handle_input(3)elif event.key == pygame.K_4:trivia.handle_input(4)elif event.key == pygame.K_RETURN:trivia.next_question()

鼠标事件

MOUSEMOTION:当用户移动鼠标时,会触发此事件。

MOUSEMOTION事件的相关属性及其含义:

  • event.pos:返回鼠标的当前位置,是一个包含两个元素的元组,表示鼠标在窗口中的x和y坐标,相对于窗口左上角的距离。
  • event.rel:返回鼠标的相对移动距离,也是一个包含两个元素的元组,表示鼠标在x和y方向上的移动距离,相对于上一次事件的位置。
  • event.buttons:返回一个三元组,表示当前鼠标按钮的状态。每个元素的值是0或1,表示对应按钮是否被按下。对于左键、中键和右键,分别对应于三元组中的第1、2和3个元素。如果某个按钮被按下,则对应位置的值为1,否则为0。

下面是示例代码:

import pygame #导包
from pygame.locals import*
import sysscreen_width=500
screen_height=400
pygame.init()screen = pygame.display.set_mode(size=(screen_width,screen_height),flags=0)
while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == pygame.MOUSEMOTION:  # 检查鼠标移动事件x, y = event.pos  # 获取鼠标位置print(f"鼠标位置:({x}, {y})")pygame.display.update()

MOUSEBUTTONDOWN:当用户按下鼠标按钮时,会触发此事件。

MOUSEBUTTONUP:当用户释放鼠标按钮时,会触发此事件。

小结

Pygame支持多种类型的事件,包括鼠标移动、鼠标按键按下和释放、键盘按键按下和释放、游戏退出等。这些事件可以用于控制游戏的行为和响应用户的输入。以下是一些pygame支持的主要事件:

  1. QUIT:当用户关闭pygame窗口时,会触发此事件。
  2. ACTIVEEVENT:当窗口从最小化状态恢复或变为活动窗口时,会触发此事件。
  3. KEYDOWN:当用户按下键盘上的任意键时,会触发此事件。
  4. KEYUP:当用户释放键盘上的任意键时,会触发此事件。
  5. MOUSEMOTION:当用户移动鼠标时,会触发此事件。
  6. MOUSEBUTTONDOWN:当用户按下鼠标按钮时,会触发此事件。
  7. MOUSEBUTTONUP:当用户释放鼠标按钮时,会触发此事件。
  8. JOYAXISMOTION:当游戏控制器上的轴移动时,会触发此事件。
  9. JOYBALLMOTION:当游戏控制器上的球体移动时,会触发此事件。
  10. JOYHATMOTION:当游戏控制器上的操纵杆移动时,会触发此事件。

这些事件可以用于各种游戏逻辑,例如响应按键输入、处理游戏状态、控制动画等。

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

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

相关文章

web架构师编辑器内容-编辑器组件图层面板功能开发-锁定隐藏、键盘事件功能的开发

我们这一部分主要是对最右侧图层面板功能进行剖析,完成对应的功能的开发: 每个图层都对应编辑器上面的元素,有多少个元素就对应多少个图层,主要的功能如下: 锁定功能:点击锁定,在编辑器中没法编辑对应的组…

HashMap学习和线程安全的HashMap

HashMap的底层数据结构? HashMap在JDK1.8里面的Node数组加链表加红黑树,当链表长度大于8且数组长度大于64,链表转化为红黑树。当红黑树节点数小于6,红黑树转化为链表。在JDK1.7中是数组加链表。 为什么要用红黑树? 当…

阿赵UE学习笔记——11、地形系统

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎的用法,这次来学习一下虚幻引擎的地形系统的用法。 一、创建地形 在选项模式里面,选择地形: 进入到地形界面之后,需要先创建一个地形: 留意看…

TensorRT部署-Windows环境配置

系列文章目录 文章目录 系列文章目录前言一、安装Visual Studio (2019)二、下载和安装nvidia显卡驱动三、下载CUDA四、下载安装cuDNN五、安装Anaconda六、TensorRT安装七、安装Opencv八、Cmake 配置总结 前言 TensorRT部署-Windows环境配置 一、安装Vis…

nginx+lua配置,一个域名配置https,docker集群使用

没安装kua的先安装lua 没有resty.http模块的,许配置 nginxlua配置,一个域名配置https,docker集群使用,一个域名配置https管理整个集群 lua做转发(方向代理) 1、ad_load.lua文件 ngx.header.content_typ…

Servlet系列两种创建方式

一、使用web.xml的方式配置(Servlet2.5之前使用) 在早期版本的Java EE中,可以使用XML配置文件来定义Servlet。在web.xml文件中,可以定义Servlet的名称、类名、初始化参数等。然后,在Java代码中实现Servlet接口&#x…

基于NLP的恶意网页识别

基于NLP的恶意网页识别 基于NLP的恶意网页识别引言项目目录回顾优化HTML标签提取结果使用预训练模型Fine-tune数据处理和模型训练模型训练与评估模型导出部署与预测总结 基于NLP的恶意网页识别 引言 欢迎阅读《 基于NLP的恶意网页识别》,在前三篇中,我…

VS+QT编译环境中字符乱码问题详解

字符乱码问题详解 1 编码字符集与字符编码方式2 字符乱码原因3 字符乱码解决方案 在解释字符乱码问题之前,我们需要先理清一些基本概念 1 编码字符集与字符编码方式 编码字符集 编码字符集是所有字符以及对应代码值的集合。编码字符集中的每个字符都对应一个唯一的…

npm换源

检查现在的源地址 npm config get registry 使用淘宝镜像 npm config set registry https://registry.npm.taobao.org 使用官方镜像 npm config set registry https://registry.npmjs.org/

jeecgboot 前端bug or 后端 看图

无法显示文本 只能显示value 很恶心 如果用 varchar 就可以 不知道有没有别的方式 用int 解决 ,可能是我没有发现好的方法

渗透测试之如何部署和使用Supershell

环境: Supershell v2.0.0 Centos 7.6 docker v. 21 问题描述: 如何部署和使用Supershell 解决方案: 1、下载最新release源码,解压后进入项目目录 wget https://github.com/tdragon6/Supershell/releases/latest/download/Supershell.tar.gz如果在线下很慢,用浏览…

测试驱动开发:基于Jenkins+GoTest+HTML的持续化集成

目录 前言 一、项目框架 1.项目迭代 2.项目时序图 3.项目测试执行 二、项目具体实现 1.创建流水线 2.拉取代码 3.执行测试代码 4.生成测试报告 5.报告内容解读 6.数据统计 7.邮件通知 8.企业微信通知 三、项目遇到的问题 1.go test -args 2.go test生…

【Qt】Qt配置

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Qt SDK下载 二、配置环境变量 三、新建工程(QWidget) 四、QWidg…

Kafka-消费者-KafkaConsumer分析-SubscriptionState

KafkaConsumer从Kafka拉取消息时发送的请求是FetchRequest(具体格式后面介绍),在其中需要指定消费者希望拉取的起始消息的offset。 为了消费者快速获取这个值&#xff0c;KafkaConsumer使用SubscriptionState来追踪TopicPartition与offset对应关系。 图展示了SubscriptionSta…

物联网与智慧城市的无界未来:如何打破传统束缚,开启智能生活新篇章

目录 一、物联网&#xff1a;连接万物的技术革命 1、物联网的发展历程 2、物联网的核心技术 二、智慧城市&#xff1a;未来城市的蓝图与挑战 1、智慧城市的蓝图 2、智慧城市建设面临的挑战 3、应对挑战的措施 三、物联网与智慧城市的融合&#xff1a;打破传统束缚&…

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin

Android Matrix绘制PaintDrawable设置BitmapShader&#xff0c;手指触点为圆心scale放大原图&#xff0c;Kotlin 在 Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图的圆切图&#xff0c;Kotlin&#xff08;4&#xff09;-CSDN博客 的…

使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA

目前基于大模型的信息检索有两种方法&#xff0c;一种是基于微调的方法&#xff0c;一种是基于 RAG 的方法。 信息检索和知识提取是一个不断发展的领域&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;和知识图的出现&#xff0c;这一领域发生了显着的变化&#xff0…

全球移动通信市场,正在经历哪些新变化?

2023年已经结束了。回顾这一年的全球移动通信市场&#xff0c;如果让我用一个词来总结&#xff0c;那就是——“厚积薄发”。 从表面上来看&#xff0c;似乎并没有什么大事情发生。但实际上&#xff0c;平静的湖面之下&#xff0c;却是一片波涛汹涌、风云激荡。 无论是消费互联…

Zookeeper启动报错常见问题以及常用zk命令

Zk常规启动的命令如下 sh bin/zkServer.sh start 启动过程如果存在失败&#xff0c;是没办法直接看出什么问题&#xff0c;只会报出来 Starting zookeeper … FAILED TO START 可以用如下命令启动&#xff0c;便于查看zk启动过程中的详细错误 sh bin/zkServer.sh start-for…

ros2 基础学习16 - RQT:模块化可视化工具

RQT&#xff1a;模块化可视化工具 ROS中的Rviz功能已经很强大了&#xff0c;不过有些场景下&#xff0c;我们可能更需要一些简单的模块化的可视化工具&#xff0c;比如只显示一个摄像头的图像&#xff0c;使用Rviz的话&#xff0c;难免会觉得操作有点麻烦。 此时&#xff0c;我…