携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
pygame主循环
在pygame中游戏都是基于一个主循环来实现的,设计的思维多数是基于函数的封装,以及定时器来不断更新画面。 具体实现如下:
注意:事件类型都是大写形式,退出事件QUIT默认都会有,不同事件类型下还有相应的函数进行操作。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 监听键盘按下事件,打印出所按的键位信息
if event.type == pygame.KEYDOWN:
print(event.unicode, event.key, event.mod)
# 监听鼠标事件,打印鼠标位置信息
elif event.type == pygame.MOUSEMOTION:
print("MOUSEMOTION", event.pos, event.rel, event.buttons)
elif event.type == pygame.MOUSEBUTTONDOWN:
print("MOUSEBUTTONDOWN", event.pos, event.button)
pygame.display.update()
pygame事件监听
pygame事件监听包括鼠标事件、键盘事件、退出事件、自定义事件等... 以常用的鼠标键盘事件为例,每一类型的事件又可细分:
- 鼠标事件:鼠标按下,鼠标放开,鼠标移动
- 键盘事件:键盘按下,键盘放开
- 游戏手柄:...
在监听到用户的具体操作之后,有针对性的做出反应。同时,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() | 创建一个用户自定义的新事件 |