likes
comments
collection
share

【Python】pygame-项目实战(11)-精灵和精灵组

作者站长头像
站长
· 阅读数 16

1. 精灵和精灵组

  • 在上一节完成的案例中(请见本专栏上一篇文章),图像加载(在游戏初始化中)、位置变化(在游戏循环中)、绘制图像(在游戏循环中)都需要程序员编写代码分别处理。假如有100张图像,就变的很麻烦。
  • 为了简化开发步骤,pygame提供了两个类
    • pygame.sprite.Sprite:存储图像数据image位置rect的对象(两个属性)
    • pygame.sprite.Group
    • 在精灵类中还提供了非常重要的方法update
    • 可以根据不同的游戏角色,派生出不同的子类,然后在每个子类中,分别重写update方法,在update方法中专门来处理一下这个游戏角色位置变化的代码(因为不同的游戏角色在屏幕上的运动方式是不同的)

精灵组:

  • 是一个包含了多个精灵的对象
  • 创建精灵组的时候,我们可以使用多值参数的方式,一次性把精灵组中包含的所有精灵传入精灵组内部
  • 创建了精灵组以后,在编写游戏循环时,只需让精灵组调用两个方法update()(让组中所有精灵各自调用各自的update方法)和draw(screen)(把所有精灵的image绘制到屏幕上的每一个精灵对应的rect位置)

2. 派生精灵子类

  1. 新建plane_sprites.py文件
  2. 定义GameSprite继承自pygame.sprite.Sprite(第一个sprite是模块名称,第二个Sprite是类的名称)

注意:

  • 如果一个类的父类不是object
  • 在重写初始化方法时,一定要先super()一下父类的__init__方法
  • 保证父类中实现的__init__代码能够被正常执行
  • 要给对象定义属性,应该在__init__初始化方法中定义

属性:

  • image精灵图像,使用image_name加载
  • rect精灵大小,默认使用图像大小
  • speed精灵移动速度,默认为1

方法:

  • update每次更新屏幕时在游戏循环内调用
  • 让精灵的self.rect.y += self.speed