【Python】pygame-项目实战(11)-精灵和精灵组
1. 精灵和精灵组
- 在上一节完成的案例中(请见本专栏上一篇文章),图像加载(在游戏初始化中)、位置变化(在游戏循环中)、绘制图像(在游戏循环中)都需要程序员编写代码分别处理。假如有100张图像,就变的很麻烦。
- 为了简化开发步骤,pygame提供了两个类
pygame.sprite.Sprite
:存储图像数据image和位置rect的对象(两个属性)pygame.sprite.Group
- 在精灵类中还提供了非常重要的方法
update
- 可以根据不同的游戏角色,派生出不同的子类,然后在每个子类中,分别重写
update
方法,在update方法中专门来处理一下这个游戏角色位置变化的代码(因为不同的游戏角色在屏幕上的运动方式是不同的)
精灵组:
- 是一个包含了多个精灵的对象
- 创建精灵组的时候,我们可以使用多值参数的方式,一次性把精灵组中包含的所有精灵传入精灵组内部
- 创建了精灵组以后,在编写游戏循环时,只需让精灵组调用两个方法
update()
(让组中所有精灵各自调用各自的update方法)和draw(screen)
(把所有精灵的image绘制到屏幕上的每一个精灵对应的rect位置)
2. 派生精灵子类
- 新建
plane_sprites.py
文件 - 定义
GameSprite
继承自pygame.sprite.Sprite
(第一个sprite是模块名称,第二个Sprite是类的名称)
注意:
- 如果一个类的父类不是
object
- 在重写初始化方法时,一定要先
super()
一下父类的__init__
方法 - 保证父类中实现的__init__代码能够被正常执行
- 要给对象定义属性,应该在__init__初始化方法中定义
属性:
- image精灵图像,使用image_name加载
- rect精灵大小,默认使用图像大小
- speed精灵移动速度,默认为1
方法:
- update每次更新屏幕时在游戏循环内调用
- 让精灵的self.rect.y += self.speed
转载自:https://juejin.cn/post/7132106559823462408