Pygame精灵和精灵组
Pygame 提供了两个类
pygame.sprite.Sprite —— 存储 图像数据 image 和 位置 rect 的 对象
pygame.sprite.Group
精灵
在游戏开发中,通常把 显示图像的对象 叫做精灵 Sprite
精灵 需要 有 两个重要的属性
image 要显示的图像
rect 图像要显示在屏幕的位置
默认的 update() 方法什么事情也没做
子类可以重写此方法,在每次刷新屏幕时,更新精灵位置
注意:pygame.sprite.Sprite 并没有提供 image 和 rect 两个属性
需要程序员从 pygame.sprite.Sprite 派生子类
并在 子类 的 初始化方法 中,设置 image 和 rect 属性
精灵组
一个 精灵组 可以包含多个 精灵 对象
调用 精灵组 对象的 update() 方法
可以 自动 调用 组内每一个精灵 的 update() 方法
调用 精灵组 对象的 draw(屏幕对象) 方法
可以将 组内每一个精灵 的 image 绘制在 rect 位置
注意:仍然需要调用 pygame.display.update() 才能在屏幕看到最终结果
派生精灵子类
新建 plane_sprites.py 文件
定义 GameSprite 继承自 pygame.sprite.Sprite
注意
如果一个类的 父类 不是 object
在重写 初始化方法 时,一定要 先 super() 一下父类的 __init__ 方法
保证父类中实现的 __init__ 代码能够被正常执行
代码:
#导pygame的包
import pygame
#定义一个游戏精灵基类
class Gamesprite(pygame.sprite.Sprite):
#初始化方法 参数(图片路径,英雄飞机移动速度)
def __init__(self,image_name,speed):
#调用父类的初始化方法
super().__init__()
#加载图像
self.image = pygame.image.load(image_name)
提示
image 的 get_rect() 方法,可以返回 pygame.Rect(0, 0, 图像宽, 图像高) 的对象
#记录尺寸
self.rect = self.image.get_rect()
#记录速度
self.speed = speed
#重写update方法
def update(self,*args):
#默认在垂直方向移动
self.rect.y+=self.speed