Python pygame 项目实战事件监听
作者:ZacheryZHANG??????? 发布时间:2023-05-31 21:33:20
标签:Python,pygame,事件,监听
1. 在游戏循环中监听事件
事件event:
就是游戏启动后,用户针对游戏所做的操作
例如:点击关闭按钮,点击鼠标,按下键盘
监听:
在游戏循环中,判断用户具体操作
只有捕获到用户具体的操作,才能有针对性的做出响应
简而言之,在游戏循环中编写一小段代码,通过这一小段代码,判断用户的具体操作行为,这个就叫做监听
代码实现:
pygame中通过
pygame.event.get()
可以获得用户当前所做动作的事件列表
(因为同一时间用户所作的操作可能会有很多件)用户可以同一时间做很多事情
提示:这段代码非常的固定,几乎所有的pygame游戏都大同小异!
2. 案例演示
2.1 案例概览
本节,我们将在上一小节的基础上(详情请见本专栏上一篇文章),完成捕获用户所做的动作事件列表。
以下代码中,使用了pygame.event.get()
方法,get
方法返回的类型为列表类型,因此,我们使用event_list
变量来接收get方法返回的结果。但是,如果仅仅是这样改造代码,运行时在程序控制台输出了很多空的列表。因此,我们可以考虑增加if
判断,判断是否用户进行了操作事件(是否有操作事件发生)。此时,再运行程序,就可以输出很多操作细节了。(可以移动鼠标或者按下键盘试试),控制台会输出捕获的用户操作。
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)
# 捕获事件
event_list = pygame.event.get()
if len(event_list) > 0:
print(event_list)
# 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.2 运行结果
运行结果如下所示:
来源:https://juejin.cn/post/7131375568104194055


猜你喜欢
- pandas每次多Sheet写入文件,只能一次性存入,不然每次会重写文件,最后只保留最后一次的写入。# !usr/bin env pytho
- 最近接到一个任务,就是用django后端,前段用vue,做一个普通的简单系统,我就是一搞后端的,听到vue也是比较震惊,之前压根没接触过vu
- 本文实例为大家分享了Python3实现飞机大战游戏的具体代码,供大家参考,具体内容如下1、主程序:plane_main.pyimport p
- Cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个Web站点会话之间持久地保持数据。Request和Res
- 本文实例总结了go语言中使用timer的常用方式。分享给大家供大家参考。具体分析如下:下面三段代码(A,b,C)的功能都是在5分钟后执行指定
- 代码优化 for($i=0;$i<8;$i++){ array_push($week,$arr); } for($i=0;$i<
- 之前用Crystal做了一个数字转English Word的Formula刚刚心血来潮, 大半个晚上写了JS版本的数字转换, 由于JS的Bu
- 人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:人民币和美元间汇率固定为:1美元 = 6.78人民币。程序可以接
- 最初我们介绍到 Matplotlib 可以绘制2D图形,并且介绍了一些常见图形的绘制方法,其实不仅可以绘制2D图形,现在较新版本的 Matp
- 代码很简洁,功能很实用,这里就不多废话了,直接给大家奉上代码:/** * Created by Administrator on 15-1-
- 本文实例讲述了php版银联支付接口开发的方法。分享给大家供大家参考,具体如下:支付接口现在有第三方的支付接口也有银行的支付接口。这里就来介绍
- 问题背景用户反馈说当与外部客户端进行 FTP 传输时,可以成功登录,但无法传输任何数据。总之 FTP 传输失败,需要来弄清楚到底发生了什么。
- 项目中遇到一个需求,要把中国式的显示阿拉伯数字的方式改为欧式的,即每三位显示,中间用逗号隔开,比如12345678改成12,345,678的
- 目录1. 正则表达式_匹配单个字符2. 正则表达式_匹配多个字符3. 正则表达式_匹配分组小提示:4. 小练习答案:总结1. 正则表达式_匹
- 本文介绍了python selenium UI自动化解决验证码的4种方法,分享给大家,具体如下:测试环境windows7+firefox50
- 前言前文讲述了ppi-cpi和m0-m1-m2的图形绘制,在本文中继续分享一个反映经济活动景气度的指标PMI,在本文中还是采用爬虫的方式获取
- PyCharm是JetBrains系列产品的一员,也是现在最好用的IDE。PyCharm维持了JetBrains一贯高度智能的作风,简要枚举
- 前言最近在工作中遇到一个需求:修改MySQL用户的权限,需要限制特定IP地址才能访问,第一次遇到这类需求,结果在测试过程,使用更新系统权限报
- 影响用户访问的最大部分是前端的页面。网站的划分一般为二:前端和后台。我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为
- 这篇文章主要介绍了Python实现图片批量加入水印代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要