当前位置: 首页 > news >正文

Pygame中Sprite类实现多帧动画3-1

1 多帧动画介绍

通过多个帧实现动画的原理如图1所示。

图1 多个帧

其中图1包含了6个飞龙的动作,这6个动作可以看作6个帧,按照一定的时间间隔显示这6个帧,就可以得到飞龙飞行的效果,如图2所示。

图2 飞龙飞行动画

相关链接1 帧:是影像动画中的最小单位画面。在影像动画中,一帧是一幅静止的画面,连续的帧形成动画或视频。

2 Sprite类介绍

Pygame中的Sprite类用于游戏开发,表示游戏中的角色、道具或者背景等各种元素。通过Sprite类,可以轻松管理和操作游戏中的图形对象,使得游戏开发变得更加简单和高效。Sprite类也叫做“精灵”类。

3 自定义“精灵”类的子类

通过“精灵”类实现多帧动画,一般是自定义精灵类的子类,该子类表示游戏中的“飞龙”这个角色。

3.1 子类的__init__()方法

代码如图3所示。

图3 自定义“精灵”类的子类

从图3中可以看出,MySprite类是派生自pygame.sprite.Sprite类的子类;在该类的__init__()方法中,第7行代码调用其父类的__init__()方法,第8-9行定义了MySprite类的两个属性image和rect,这两个属性是自定义“精灵”类的子类必备的,分别表示该类对应的图片以及图片的大小。除了以上两个属性,在__init__()方法中还定义了其它属性,这些属性没有在图3的代码中显示出来,后续用到哪个属性再详细讲解。

3.2 子类的load()方法

MySprite类load()方法作用是导入包含“飞龙”所有帧的图片,即图1显示的图片文件;设置每帧的宽度、高度及范围;获取图片中最后一帧的编号。

3.2.1 子类的load()方法的格式

子类的load()方法的格式如图4所示。

图4 load()方法的格式

其中,filename表示要导入的图片文件名;width和height表示每一帧的宽度和高度;columns表示图片中包含的帧有多少行。

3.2.2 导入图片

在load()函数中,首先导入图片文件,代码如图5所示。

图5 导入图片文件代码

其中,master_image是MySprite类的属性,在其__init__()方法中定义;通过pygame.image.load()方法导入图片文件,convert_alpha()方法的作用是将图片转换为支持透明度的更高效的格式,使用这种转换后的格式,当调用blit()方法显示该图片时,可以提高显示速度。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一个例子彻底搞懂对线程模型的理解 !
  • 【Puppeteer】‘left‘ is already pressed, ‘${button}‘ is already pressed 的解决办法
  • Qt常用控件——QRadioButton和QCheckBox
  • 【VSCode v1.93.0】手动配置远程remote-ssh
  • 开源可视化大屏superset Docker环境部署
  • 计算机网络练级第一级————认识网络
  • VSTO常见的异常
  • 【自然语言处理】实验一:基于NLP工具的中文分词
  • 7.1图像平移
  • 安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静
  • 哈希表、算法
  • jupyter notebook详细介绍-学习篇
  • 网络编程(UDP)
  • 云原生周刊:OpenTofu Registry 获得用户界面和 API|2024.9.9
  • 【C语言】揭开计数制的面纱:深入浅出二进制及二进制计算
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 3.7、@ResponseBody 和 @RestController
  • css系列之关于字体的事
  • dva中组件的懒加载
  • Git的一些常用操作
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Redis 中的布隆过滤器
  • Twitter赢在开放,三年创造奇迹
  • 机器学习中为什么要做归一化normalization
  • 基于axios的vue插件,让http请求更简单
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 收藏好这篇,别再只说“数据劫持”了
  • 硬币翻转问题,区间操作
  • 正则表达式小结
  • 白色的风信子
  • 【干货分享】dos命令大全
  • 说说我为什么看好Spring Cloud Alibaba
  • ​ubuntu下安装kvm虚拟机
  • ###C语言程序设计-----C语言学习(3)#
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (day 12)JavaScript学习笔记(数组3)
  • (k8s)Kubernetes本地存储接入
  • (八)Flink Join 连接
  • (办公)springboot配置aop处理请求.
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (转)linux 命令大全
  • (转)编辑寄语:因为爱心,所以美丽
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET C# 操作Neo4j图数据库
  • .NET gRPC 和RESTful简单对比
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端