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

《pygame中Sprite类实现多帧动画》注-显示静态图片2-2

3 精灵组

3.1 精灵组介绍

精灵组是Pygame提供的一个容器类,用于管理和操作多个精灵(Sprite)对象。它可以批量处理精灵的更新、绘制、碰撞检测等操作,大大简化了游戏开发流程。虽然挡墙只有一个精灵,但是为了之后能够扩展到多个精灵,我们依然使用精灵组来管理这一个精灵。

3.2 使用精灵组管理精灵

3.2.1 创建精灵组

创建精灵组的代码如图5所示。

图5 创建精灵组的代码

3.2.2 将精灵加入到精灵组

将创建的精灵mysprite1加入到精灵组的代码如图6所示。

图6 将精灵加入到精灵组的代码

3.2.3 更新精灵组的精灵

虽然我们要实现的精灵是静态的,但是实际情况下精灵应该是在不断变化的(位置、形态等),因此需要通过图7所示的代码更行精灵组中的精灵。

图7 更新精灵组精灵的代码

精灵组sprite_group的update()方法,实际上隐式地调用了在该组中所有精灵的update()方法。因为MySprite类没有重写update()方法,此时调用的是其父类pygame.sprite.Sprite()类的update()方法。

3.2.4 显示精灵组的精灵

在更新了精灵组中所有精灵的位置及形态后,使用图8所示的代码显示精灵组中的精灵。

图8 显示精灵组精灵的代码

其中,screen为创建的窗口Surface,表示所有的精灵都在screen中显示。精灵组sprite_group的draw()方法,实际上隐式地调用了在该组中所有精灵父类pygame.sprite.Sprite的draw()方法。

注意2 如果MySprite类重写了update()方法,则sprite_group.update()会调用chongxie的update()方法;但是即使MySprite类重写了draw()方法,sprite_group.draw()也只会调用pygame.sprite.Sprite类的update()方法,而不是其子类MySprite的draw()方法。

4 完整代码

完成代码如下所示。

import pygame
from pygame.locals import *SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
BACKGROUND = 'green'
FPS = 60
FILEPATH = '2.png'  class MySprite(pygame.sprite.Sprite):def __init__(self, filepath):super().__init__()self.image = pygame.image.load(filepath).convert_alpha()self.rect = self.image.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))mysprite1 = MySprite('./'+FILEPATH)
sprite_group = pygame.sprite.Group()
sprite_group.add(mysprite1)running = True
clock = pygame.time.Clock()while running:for event in pygame.event.get():if event.type == QUIT:running = Falsescreen.fill(BACKGROUND)sprite_group.update()sprite_group.draw(screen)pygame.display.update()clock.tick(FPS)pygame.quit()

http://www.dtcms.com/a/552924.html

相关文章:

  • 2025年10月31日Github流行趋势
  • 深入浅出wpf学习总结
  • 建搜索引擎网站做欧洲电商看哪个网站
  • 【Linux网络】实现一个简单的聊天室
  • HTTPS接口国密安全设计-示例
  • 通过nginx+openssl自签名证书部署https应用并解决不安全问题
  • AI提示词:别再把提示词当 “聊天”—— 它是人机协作的 “接口定义”
  • Rust开发之使用panic!处理不可恢复错误
  • 买业务送网站浙江省住房和城乡建设厅网站查询
  • 网站托管服务 优帮云网站专题页面用什么做
  • Redisson 的分布式锁机制幽默笑话理解
  • Qt-HTTPWebSocket
  • MATLABcode|2个雷达二维目标跟踪滤波系统 - EKF实现,匀速运动模型,输入:雷达观测数据(距离、方位角),输出:目标状态估计(位置、速度)
  • TDengine 数据函数 CORR 用户手册
  • Java的驼峰转换实现方案
  • 从零开始的C++学习生活 19:C++复习课(5.4w字全解析)
  • 阿里云-云服务器的创建与使用
  • 安防监控系统:安防之眼,智守未来
  • 网站建设吸引人的话语广元北京网站建设
  • 网站上线前营销推广工作准备网站创建费用
  • Apache Tomcat RewriteValve目录遍历漏洞 | CVE-2025-55752 复现
  • k8s:service资源详解
  • 大型系统性能优化问题
  • 国际版多语言语聊语音厅交友源码开发:技术特性、中外差异与核心注意事项
  • 面对网络蠕虫的紧急处理方式和防护措施
  • 深入掌握 Maven Settings:从配置到实战
  • 厦门做网站seo的惠州哪家做网站比较好
  • 目标检测原理分享
  • AI驱动的VSCode插件开发:从模型研发到性能优化的全栈实践
  • 6 种无误的方法:如何备份和恢复华为手机