Python pygame项目实战监听退出事件

2022-08-15 671阅读

温馨提示:这篇文章已超过591天没有更新,请注意相关的内容是否还可用!

这篇文章主要介绍了Python pygame项目实战监听退出事件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下!

1. 事件监听

首先,我们简单回顾一下事件监听,可以简单概括如下:

在游戏循环中,我们希望判断用户具体操作只有捕获到用户具体的操作,才能有针对性的做出响应简而言之,在游戏循环中编写一小段代码,通过这一小段代码,判断用户的具体操作行为,这个就叫做监听

注意:我们想在游戏中实现监听退出事件并且退出游戏,其实代码非常固定(代码形式都差不多),因为几乎所有的pygame游戏都大同小异。

2. 案例演示

2.1 案例大体思路

代码实现大体思路:首先,我们考虑在游戏循环内部再增加一个for循环,来检测一下当前这一时刻到底发生了哪些事件。然后,在循环体内部,再增加一个条件判断,判断一下事件类型是否是pygame定义的QUIT事件(对应的就是用户点击的关闭按钮)。一旦发现用户点击关闭按钮,我们就可以在if语句下方,编写代码退出程序。

pygame.QUIT方法可以将所有pygame的模块做一个卸载。exit()将当前执行的程序直接退出,将当前正在执行的程序做一个终止。

2.2 代码演示

具体代码演示如下所示:可以在上一节(本专栏上一篇文章)中代码的基础上进行修改。

import pygame
pygame.init()

# 创建游戏的窗口 640*642
screen = pygame.display.set_mode((640, 642))

# 绘制背景图像
bg = pygame.image.load("./飞机大战资料包/images/background1.jpg")
screen.blit(bg, (0, 0))

# 绘制英雄的飞机
hero = pygame.image.load("./飞机大战资料包/images/me1.png")
screen.blit(hero, (280, 500))

# 可以在所有绘制工作完成之后,统一调用update方法
pygame.display.update()

# 创建时钟对象
clock = pygame.time.Clock()

# 游戏循环->意味着游戏的正式开始

# 1. 定义rect记录飞机的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)

# 游戏循环->意味着游戏的正式开始
while True:
# 希望无限循环内部的代码每秒钟重复循环60次
# 可以指定循环体内部的代码执行的频率
clock.tick(60)

# 监听事件
for event in pygame.event.get():
# 判断事件类型是否是退出事件
if event.type == pygame.QUIT:
print("游戏退出...")

# quit卸载所有的模块
pygame.quit()

# exit()直接终止当前正在执行的程序
exit()

# 2. 修改飞机的位置
hero_rect.y -= 1
# 判断飞机的位置
if hero_rect.y <= -126:
hero_rect.y = 642

# 3. 调用blit方法绘制图像
# 先绘制背景,在绘制飞机,就不会留下残影(背景把上一次的飞机遮挡)
screen.blit(bg, (0, 0))
screen.blit(hero, hero_rect)

# 4. 调用update方法更新显示
pygame.display.update()
pygame.quit()

2.3 运行结果

代码运行结果如下图所示:当运行程序后,点击退出按钮,可以正常终止屏幕中的游戏画面,并且在控制台输出如下图结果。