Python之Pygame的Event事件模块怎么使用

Pygame的Event事件模块

事件(event)是 pygame 的重要模块之一,它是构建整个游戏程序的核心,比如常用的鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等,这些都可以看做是“事件”。

 事件类型

Pygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件)。下述表格列出了 Pygame 中常用的游戏事件:

名称 说明

QUIT用户按下窗口的关闭按钮ATIVEEVENTPygame被激活或者隐藏KEYDOWN键盘按下KEYUP键盘放开MOUSEMOTION鼠标移动MOUSEBUTTONDOWN鼠标按下MOUSEBUTTONUP鼠标放开JOYAXISMOTION游戏手柄(Joystick or pad) 移动JOYBALLMOTION 游戏球(Joy ball) 移动JOYHATMOTION游戏手柄(Joystick) 移动JOYBUTTONDOWN游戏手柄按下JOYBUTTONUP游戏手柄放开VIDEORESIZEPygame窗口缩放VIDEOEXPOSEPygame窗口部分公开(expose)USEREVENT触发一个用户事件

注意,当使用 Pygame 做游戏开发时,上述事件并非都会应用的到,因此在学习的过程中,我们要懂得触类旁通、举一反三。

事件处理方法

名称 说明

pygame.event.get()从事件队列中获取一个事件,并从队列中删除该事件pygame.event.wait() 阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态pygame.event.set_blocked() 控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入pygame.event.set_allowed()  控制哪些事件允许进入队列pygame.event.pump() 调用该方法后,Pygame 会自动处理事件队列pygame.event.poll() 会根据实际情形返回一个真实的事件,或者一个Nonepygame.event.peek()  检测某类型事件是否在队列中pygame.event.clear()从队列中清除所有的事件pygame.event.get_blocked() 检测某一类型的事件是否被禁止进入队列pygame.event.post()  放置一个新的事件到队列中pygame.event.Event()  创建一个用户自定义的新事件

当我们使用 Pygame 处理事件时,逻辑一般都是相似的。需要先确定事件的类型,然后针对每种事件类型采取不同的游戏操作。因此,if & else 语句非常适用于这种情况。如下所示:

import pygamewhile True:    # 等待事件发生    event = pygame.event.wait()    if event.type == pygame.QUIT:        exit()    if event.type == pygame.MOUSEBUTTONDOWN:        print('鼠标按下', event.pos)    if event.type == pygame.MOUSEBUTTONUP:        print('鼠标弹起')    if event.type == pygame.MOUSEMOTION:        print('鼠标移动')        # 键盘事件    if event.type == pygame.KEYDOWN:        # 打印按键的英文字符        print('键盘按下', chr(event.key))    if event.type == pygame.KEYUP:        print('键盘弹起')

登录后复制

 处理键盘事件

我们可以使用键盘事件提供的 key 属性获取按下的键盘按键。Pygame 将键盘上的字母键、数字键、组合键等按键以常量的方式进行了定义,下表列出了部分常用按键的常量:

名称 说明

K_BACKSPACE退格键(Backspace)K_TAB制表键(Tab)K_CLEAR清除键(Clear)K_RETURN回车键(Enter)K_PAUSE暂停键(Pause)K_ESCAPE退出键(Escape)K_SPACE空格键(Space)K_0…K_90…9K_a…Kza…zK_DELETE删除键(delete)K_KP0…K_KP90(小键盘)…9(小键盘)K_F1…K_F15F1…F15K_UP向上箭头(up arrow)K_DOWN向下箭头(down arrow)K_RIGHT向右箭头(right arrow)K_LEFT向左箭头(left arrow)KMOD_ALT同时按下Alt键

下面通过“图片移动”示例来了解键盘事件的处理过程,如下所示:

立即学习“Python免费学习笔记(深入)”;

import pygameimport sys# 初始化pygamepygame.init()# 定义变量size = width, height = 600, 400bg = (255, 255, 255)# 加载logo图img = pygame.image.load("./python.png")# 获取图像的位置position = img.get_rect()# 创建一个主窗口screen = pygame.display.set_mode(size)# 标题pygame.display.set_caption("Python自学网")# 创建游戏主循环while True:    # 设置初始值    site = [0, 0]    for event in pygame.event.get():        if event.type == pygame.QUIT:            sys.exit()        # 图像移动 KEYDOWN 键盘按下事件        # 通过 key 属性对应按键        if event.type == pygame.KEYDOWN:            if event.key == pygame.K_UP:                site[1] -= 8            if event.key == pygame.K_DOWN:                site[1] += 8            if event.key == pygame.K_LEFT:                site[0] -= 8            if event.key == pygame.K_RIGHT:                site[0] += 8    # 移动图像    position = position.move(site)    # 填充背景    screen.fill(bg)    # 放置图片    screen.blit(img, position)    # 更新显示界面    pygame.display.flip()

登录后复制

处理鼠标事件

Pygame 提供了三个鼠标事件,分别是鼠标移动(MOUSEMOTION)、鼠标按下(MOUSEBUTTONDOWN)、鼠标释放(MOUSEBUTTONUP),不同事件类型对应着不同的成员属性。如下所示:

pygame.event.MOUSEMOTION鼠标移动事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.rel 鼠标相对运动距离(X,Y),相对于上次事件
    event.buttons 鼠标按钮初始状态(0,0,0),分别对应(左键,滑轮,右键),移动过程中点击那个键,相应位置变会为1

pygame.event.MOUSEBUTTONUP鼠标键释放事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.button 鼠标释放键编号(整数)左键为1,按下滚动轮2、右键为3

pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.button 鼠标按下键编号(整数),左键为1,按下滚动轮2、右键为3,向前滚动滑轮4、向后滚动滑轮5

import pygamefrom random import randint# 初始化程序pygame.init()screen = pygame.display.set_mode((450, 400))pygame.display.set_caption("Python自学网")# 更新显示pygame.display.flip()while True:    # 等待事件发生    event = pygame.event.wait()    if event.type == pygame.QUIT:        exit("成功退出")    if event.type == pygame.MOUSEBUTTONDOWN:        # pos 获取鼠标当前位置        print('鼠标按下', event.pos)        mx, my = event.pos        # 调用 pygame.draw 模块画圆        pygame.draw.circle(screen, (255, 255, 0), (mx, my), 50)        # 处理完,更新显示        pygame.display.update()    if event.type == pygame.MOUSEBUTTONUP:        print('鼠标弹起')        pass    if event.type == pygame.MOUSEMOTION:        print('鼠标移动')        mx, my = event.pos        # 随机生成 RGB 颜色值        r = randint(0, 255)        g = randint(0, 255)        b = randint(0, 255)        pygame.draw.circle(screen, (r, g, b,), (mx, my), 50)        # 处理完,更新显示        pygame.display.update()

登录后复制

以上就是Python之Pygame的Event事件模块怎么使用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2235124.html

(0)
上一篇 2025年2月26日 17:53:35
下一篇 2025年2月25日 16:17:26

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 使用Python进行交易策略和投资组合分析

    我们将在本文中衡量交易策略的表现。并将开发一个简单的动量交易策略,它将使用四种资产类别:债券、股票和房地产。这些资产类别的相关性很低,这使得它们成为了极佳的风险平衡选择。 动量交易策略 这个策略是基于动量的的,因为交易者和投资者早就意识到动…

    2025年2月26日 编程技术
    200
  • python包如何使用

    python 包的模块 函数 类 定义 导入使用详细说明 下面是一个使用 python 包的详细案例,它涉及到模块、函数和类的定义、导入以及使用: 首先,我们创建一个名为 my_package 的目录,作为包的根目录。在其中创建以下文件: …

    编程技术 2025年2月26日
    200
  • Python列表解析和生成器表达式的结构是什么

    列表解析与生成器表达式 生成器表达式是生成容器的一种简洁方式。最常见的是,你会听到列表解析,但也存在集合解析和字典解析。但是,术语上的差异有些重要:如果你实际上是在制作列表,那么它只是一个列表解析。 生成器表达式用括号括起来( ),而列表解…

    编程技术 2025年2月26日
    200
  • Python catplot函数自定义颜色的方法是什么

    一、catplot函数 catplot() 函数是 seaborn 中一个非常有用的函数,它可以绘制分类变量的图形,并可以根据另一个或多个变量进行分组。使用不同的图表类型,catplot() 函数可以创建适当的图表。 默认情况下,catpl…

    2025年2月26日 编程技术
    200
  • Python怎么用Gradio与EasyOCR构建在线识别文本的Web应用

    一、Gradio是什么 gradio是一个开源的 python 库,用于构建机器学习和数据科学演示和 web 应用。 官网:https://www.gradio.app/ Gradio适用于: 演示客户/合作者/用户/学生的机器学习模型。 …

    2025年2月26日 编程技术
    200
  • 如何利用Python实现模拟登录知乎

    环境与开发工具 在抓包的时候,开始使用的是chrome开发工具中的network,结果没有抓到,后来使用fiddler成功抓取数据。下面逐步来细化上述过程。 模拟知乎登录前,先看看本次案例使用的环境及其工具: Windows 7 + Pyt…

    2025年2月26日 编程技术
    200
  • Python怎么使用json数据键值对遍历

    Python对于json数据键值对遍历 python中可以使用json模块来解析json格式的数据,将其转换成python中的字典或者列表对象。对于json数据中的键值对的遍历,我们可以通过python中字典或者列表的遍历方式来实现。 例如…

    编程技术 2025年2月26日
    200
  • Python怎么实现修改Excel文件的元数据

    应用场景 这段代码可以用于修改excel文件的元数据,例如作者、主题、描述等,通过使用python和openpyxl模块,以及wxpython库,我们可以创建一个gui界面来输入元数据,然后将这些元数据与excel文件一起保存。 以下是几个…

    2025年2月26日
    200
  • python怎么利用chinese_calendar获取上一个工作日日期

    **截止文章发布chinese_calendar版本为1.8.0,大约在每年的11月份更新次年的节假日新版本 import datetimefrom chinese_calendar import is_workdaydef get_per…

    2025年2月26日
    200
  • Python随机值怎么实现

    介绍 生成随机值的能力是一项重要的编程技能。即使你不是每天都需要它们,随机值仍然会出现在数量惊人的地方。当然,对于许多人来说,当他们想到随机值时,首先想到的是与游戏相关的用例,如洗牌、掷骰子和老虎机。 然而,随机值还有许多其他用途。这些包括…

    2025年2月26日
    200

发表回复

登录后才能评论