📅  最后修改于: 2023-12-03 15:33:50.038000             🧑  作者: Mango
Pygame 是一个专门用于开发游戏的 Python 库。在 Pygame 中,事件处理非常重要,因为游戏中的用户输入、游戏流程等都需要通过事件来处理。
在 Pygame 中,事件来源于用户输入、系统消息、定时器等。常用的事件类型有:
事件循环是 Pygame 中非常重要的概念,它是一个无限循环,用于不断接收事件并处理。通常情况下,主循环的结构为:
import pygame
pygame.init()
# 创建窗口
screen = pygame.display.set_mode((640, 480))
# 设置窗口标题
pygame.display.set_caption('Pygame Demo')
running = True
while running:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
# 绘制游戏内容
screen.fill((255, 255, 255))
pygame.display.flip()
pygame.quit()
上述代码创建了一个 640x480 的新窗口并设置了标题为 Pygame Demo。在主循环中,不断地通过 pygame.event.get() 获取事件并逐一处理。在本例中,当 QUIT 事件触发时,将变量 running 置为 False 从而退出主循环。此外,当键盘按下 ESC 键时也会退出主循环。
在事件循环中,还可以通过 pygame.event.poll() 单次获取一个事件。在本例中,只需修改上述代码中的 for 循环:
# 处理事件
event = pygame.event.poll()
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
在事件循环中,每次循环可通过 pygame.event.get() 或 pygame.event.poll() 获取一个事件,该事件为 pygame.event.Event 对象的实例。
在 Pygame 中,Event 对象包含以下属性:
在事件循环中,最常用的是判断事件类型,根据事件类型做出相应的操作。例如,检测到 KEYDOWN 事件时,可通过 event.key 判断用户按下了哪个键。
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
# 用户按下了向右箭头键
elif event.key == pygame.K_LEFT:
# 用户按下了向左箭头键
在 Pygame 中,还可以自定义事件,即创建一个 Event 对象来表示用户自定义的事件。
我们可以通过 pygame.USEREVENT 创建一个自定义事件。创建事件后,可通过 pygame.time.set_timer() 函数来设置该事件的触发间隔时间。
例如,每隔 5 秒触发一次自定义事件:
# 创建自定义事件
MY_EVENT = pygame.USEREVENT + 1
# 设置自定义事件的触发间隔时间为 5 秒
pygame.time.set_timer(MY_EVENT, 5000)
while True:
for event in pygame.event.get():
if event.type == MY_EVENT:
# 自定义事件触发
在 Pygame 中,事件处理是非常重要的部分。在主循环中,通过 pygame.event.get() 或 pygame.event.poll() 获取事件,并根据事件类型做出相应的操作。同时,还可以自定义事件,并通过 pygame.time.set_timer() 函数设置事件的触发间隔时间。