admin 管理员组

文章数量: 1086058

Python 理解 精灵 和 精灵组

1.1 精灵 和 精灵组
在刚刚完成的案例中,图像加载、位置编号、绘制图像 都需要程序员编写代码分别处理。
为了简化开发步骤: pygame 提供两个类。
pygame.sprite.Sprite — 存储 图像数据 Image 和 位置 rect 的 对象。
pygame.sprite.Group()

1.2 派生精灵子类
1.新建 plane_sprites.py 文件;
2.定义 GameSprite 继承自 pygame.sprite.Sprite;

注意:
如果一个类的 父类 不是 object;
在重写 初始化方法 时,一定要 先 super() 一下父类的 init 方法;
保证父类中实现的 init 代码能够被正常执行。

属性
image 精灵图像,使用 image_name 加载;
rect 精灵大小,默认使用图像大小;
speed 精灵移动速度,默认为1;
方法
update 每次更新屏幕时在游戏循环内使用;
让精灵的 self.rect.y ==self.speed
提示
image 的 get_rect() 方法,可以返回pygame.Rect(0,0,图像宽,图像搞)的对象。

1.3 使用 游戏精灵 和 精灵组 创建敌机
需求
使用刚刚派生的 游戏精灵 和 精灵组 创建 敌机 并且实现敌机动画。
步骤:
1、使用 from 导入 plane_sprites 模块
from 导入的模块可以 直接使用;
import 导入的模块需要通过 模块名,来使用
2、在 游戏初始化 创建 精灵对象 和 精灵组对象;
3、在 游戏循环中 让 精灵组 分别调用 update() 和 draw(screen) 方法;

职责
精灵:
封装 图像image、位置rect 和 speed;
提供 update() 方法,根据游戏需求,更新位置rect;
精灵组:
包含 多个 精灵对象;
update 方法,让精灵组中的所有精灵调用 update 方法更新位置;
draw(screen) 方法,在 screen 上绘制精灵组中的所有精灵;

import pygame
from plane_sprites import *# 游戏的初始化
pygame.init()# 创建游戏的窗口
screen = pygame.display.set_mode((480,700))# 绘制背景图像
# 1>加载图像数据
bg = pygame.image.load("./images/background.png")
# 2>blit 绘制图像
screen.blit(bg,(0,0))
# 3>update 更新屏幕显示
#pygame.display.update()# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(200,500))# 可以在所有绘制工作完成之后,统一调用update 方法
pygame.display.update()# 创建时钟对象
clock = pygame.time.Clock()# 定义 Rect 记录飞机的初始位置
hero_rect = pygame.Rect(200,500,102,126)# 创建敌机的精灵
enemy = GameSprite("./images/enemy1.png")
enemy1 = GameSprite("./images/enemy1.png",2)
# 创建敌机的精灵组
enemy_group = pygame.sprite.Group(enemy,enemy1)# 游戏循环 -> 意味着游戏的正式开始!while True:# 可以指定循环体内部的代码执行的帧率clock.tick(60)# 监听事件for event in pygame.event.get():# 判断事件类型是否是退出事件if event.type == pygame.QUIT:print("游戏退出")# quit 卸载所有的模块pygame.quit()# exit()exit()# 捕获事件event_list = pygame.event.get()if len(event_list) > 0:print(event_list)# 修改飞机的位置hero_rect.y -= 1# 判断飞机的位置if hero_rect.y <=0:hero_rect.y = 700# 调用blit方法绘制图像screen.blit(bg,(0,0))screen.blit(hero,hero_rect)# 让精灵组调用两个方法# update - 让组中的所有精灵更新位置enemy_group.update()# draw - 在screen上绘制所有的精灵enemy_group.draw(screen)# 调用update方法更新显示pygame.display.update()pygame.quit()

本文标签: Python 理解 精灵 和 精灵组