Pygame的Event事件模块
事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如常用的鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等,这些都可以看做是“事件”。
事件类型
Pygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件)。下述表格列出了 Pygame 中常用的游戏事件:
名称 | 说明 |
---|---|
QUIT |
用户按下窗口的关闭按钮 |
ATIVEEVENT |
Pygame被激活或者隐藏 |
KEYDOWN |
键盘按下 |
KEYUP |
键盘放开 |
MOUSEMOTION |
鼠标移动 |
MOUSEBUTTONDOWN |
鼠标按下 |
MOUSEBUTTONUP |
鼠标放开 |
JOYAXISMOTION |
游戏手柄(Joystick or pad) 移动 |
JOYBALLMOTION |
游戏球(Joy ball) 移动 |
JOYHATMOTION |
游戏手柄(Joystick) 移动 |
JOYBUTTONDOWN |
游戏手柄按下 |
JOYBUTTONUP |
游戏手柄放开 |
VIDEORESIZE |
Pygame窗口缩放 |
VIDEOEXPOSE |
Pygame窗口部分公开(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() |
会根据实际情形返回一个真实的事件,或者一个None |
pygame.event.peek() |
检测某类型事件是否在队列中 |
pygame.event.clear() |
从队列中清除所有的事件 |
pygame.event.get_blocked() |
检测某一类型的事件是否被禁止进入队列 |
pygame.event.post() |
放置一个新的事件到队列中 |
pygame.event.Event() |
创建一个用户自定义的新事件 |
当我们使用 Pygame 处理事件时,逻辑一般都是相似的。需要先确定事件的类型,然后针对每种事件类型采取不同的游戏操作。因此,if & else 语句非常适用于这种情况。如下所示:
import pygame while 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_9 |
0…9 |
K_a...Kz |
a…z |
K_DELETE |
删除键(delete) |
K_KP0...K_KP9 |
0(小键盘)…9(小键盘) |
K_F1...K_F15 |
F1…F15 |
K_UP |
向上箭头(up arrow) |
K_DOWN |
向下箭头(down arrow) |
K_RIGHT |
向右箭头(right arrow) |
K_LEFT |
向左箭头(left arrow) |
KMOD_ALT |
同时按下Alt键 |
下面通过“图片移动”示例来了解键盘事件的处理过程,如下所示:
import pygame import sys # 初始化pygame pygame.init() # 定义变量 size = width, height = 600, 400 bg = (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),分别对应(左键,滑轮,右键),移动过程中点击那个键,相应位置变会为1pygame.event.MOUSEBUTTONUP鼠标键释放事件
event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
event.button 鼠标释放键编号(整数)左键为1,按下滚动轮2、右键为3pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件
event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
event.button 鼠标按下键编号(整数),左键为1,按下滚动轮2、右键为3,向前滚动滑轮4、向后滚动滑轮5
import pygame from 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事件模块怎么使用的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

选择Python还是C 取决于项目需求:1)如果需要快速开发、数据处理和原型设计,选择Python;2)如果需要高性能、低延迟和接近硬件的控制,选择C 。

通过每天投入2小时的Python学习,可以有效提升编程技能。1.学习新知识:阅读文档或观看教程。2.实践:编写代码和完成练习。3.复习:巩固所学内容。4.项目实践:应用所学于实际项目中。这样的结构化学习计划能帮助你系统掌握Python并实现职业目标。

在两小时内高效学习Python的方法包括:1.回顾基础知识,确保熟悉Python的安装和基本语法;2.理解Python的核心概念,如变量、列表、函数等;3.通过使用示例掌握基本和高级用法;4.学习常见错误与调试技巧;5.应用性能优化与最佳实践,如使用列表推导式和遵循PEP8风格指南。

Python适合初学者和数据科学,C 适用于系统编程和游戏开发。1.Python简洁易用,适用于数据科学和Web开发。2.C 提供高性能和控制力,适用于游戏开发和系统编程。选择应基于项目需求和个人兴趣。

Python更适合数据科学和快速开发,C 更适合高性能和系统编程。1.Python语法简洁,易于学习,适用于数据处理和科学计算。2.C 语法复杂,但性能优越,常用于游戏开发和系统编程。

每天投入两小时学习Python是可行的。1.学习新知识:用一小时学习新概念,如列表和字典。2.实践和练习:用一小时进行编程练习,如编写小程序。通过合理规划和坚持不懈,你可以在短时间内掌握Python的核心概念。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具