在之前案例中,图像加载、位置变化、绘制图像都需要编写代码分别处理
pygame提供了两个类简化开发步骤
pygame.sprite.Sprite #精灵,存储图像数据image和位置rect的对象
pygame.sprite.Group #精灵组更新和绘制所有精灵对象
 
派生精灵子类
定义子类继承pyagem.sprite.Sprite

#属性
image:精灵图像,使用image_name加载
rect:精灵大小,默认使用图像大小
speed:精灵移动速度,默认为1 #方法
update:每次更新屏幕时在游戏循环内调用 ####
image的get_rect()方法可以返回pygame.Rect(0,0,图像宽、图像高)的对下
import pygame

"""飞机大战游戏精灵"""
# 继承pygame.sprite.Sprite
class GameSprite(pygame.sprite.Sprite): def __init__(self, image_name, speed):
super().__init__() # 使用super调用父类的初始化方法 self.image = pygame.image.load(image_name) # 加载图片数据
self.rect = self.image.get_rect() # 获取图片对象
self.speed = speed # 定义移动速度 def update(self):
# 在屏幕的垂直方向向上移动
# 位置的y += 移动速度,每次移动1
self.rect.y += self.speed
使用精灵和精灵组创建敌机
在游戏初始化创建精灵对象和精灵组对象
在游戏循环中让精灵组分布调用update和draw()方法
 
精灵职责:
封装图像image、位置rect、和速度speed
提供update方法,根据游戏需求,更新位置rect
 
精灵组职责:
包含多个精灵对象
update方法让精灵组中的所有精灵调用update方法更新位置
draw方法在屏幕上绘制精灵组中的所有精灵
#游戏初始化
import pygame from plane_sprites import GameSprite pygame.init() # 创建游戏窗口
screen = pygame.display.set_mode((480, 700)) # 绘制背景图像
background = pygame.image.load('./images/background.png')
screen.blit(background, (0, 0)) # 英雄图像
hero = pygame.image.load('./images/me1.png')
screen.blit(hero, (200, 500)) # 更新图像
pygame.display.update() # 定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150, 300, 102, 126) # 创建时钟对象
clock = pygame.time.Clock() # 创建敌机精灵
enemy = GameSprite('./images/enemy1.png', 1) # 创建敌机的精灵组
enemy_group = pygame.sprite.Group(enemy)
#游戏循环

while True:
# 调用帧率方法,每1秒执行一次
clock.tick(60) # 修改飞机位置
hero_rect.y -= 1 # 判断飞机的位置
if hero_rect.y <= 0:
# 如果飞机位置<=0,重新设置y值将飞机位置设为屏幕底部
hero_rect.y = 700 # 重新绘制背景图像
screen.blit(background, (0, 0))
# 绘制飞机图像
screen.blit(hero, hero_rect) # 更新精灵组所有精灵
enemy_group.update() # 将精灵组精灵绘制到屏幕
enemy_group.draw(screen) # 更新图像
pygame.display.update() for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()

5.pygame快速入门-精灵和精灵组的更多相关文章

  1. PyGame快速入门

    pygame 快速入门 目标 项目准备 使用 pygame 创建图形窗口 理解 图像 并实现图像绘制 理解 游戏循环 和 游戏时钟 理解 精灵 和 精灵组 项目准备 新建 飞机大战 项目 新建一个 h ...

  2. 2.pygame快速入门-绘制图像

    介绍 在游戏中能够看到的游戏元素大都是图像 图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存 要在屏幕上看到某一个图像的内容,需要按照三个步骤 使用pygame.image.loa ...

  3. 4.pygame快速入门-事件监听

    事件event:游戏启动后,用户针对游戏的所有操作 监听:在游戏循环中,判断用户的具体操作 pygame中通过pygame.event.get()可以获得当前用户所做动作的事件列表   事件监听 wh ...

  4. 3.pygame快速入门-游戏循环及动画实现

    游戏循环的开始,意味着游戏的正式开始,游戏循环的作用如下 1.保证游戏不会直接退出 2.变化图像的位置--动画效果 3.检测用户交互--按键.鼠标等     游戏时钟 pyagame提供了一个pyga ...

  5. 1.pygame快速入门-创建游戏窗口

      简介 pygame是python一个包,专为电子游戏设计#安装 pip3 install pygame #验证安装 # aliens 是pygame内置的一个小游戏,可以启动成功说明pygame安 ...

  6. 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  7. 23飞机大战__pygame 快速入门

      1. 使用 pygame 创建图形窗口 小节目标 游戏的初始化和退出 理解游戏中的坐标系 创建游戏主窗口 简单的游戏循环 可以将图片素材 绘制 到 游戏的窗口 上, 开发游戏之前需要先知道 如何建 ...

  8. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(下)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(下) 上篇 我们已经成功引入 element-ui.axios.mock.iconfont.nprogress,本篇继续 ...

  9. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

随机推荐

  1. java-servlet过滤器和监听

    1 过滤器 过滤器是什么?servlet规范当中定义的一种特殊的组件,用于拦截容器的调用.注:容器收到请求之后,如果有过滤器,会先调用过滤器,然后在调用servlet. 如何写一个过滤器? 写一个ja ...

  2. 【Go实战基础】GO语言是什么,有哪些优势

    一.简介 2007年,为了提高在多核.网络机器(networked machines).大型代码库(codebases)的业务场景下的开发效率,Google 首席软件工程师决定创造一种语言那就是 Go ...

  3. Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  4. 前端利器躬行记(8)——VSCode插件研发

    VSCode提供了丰富的 API,可以借助编辑器扩展许多定制功能. 本次研发了一款名为 Search Method 的插件,在此记录整个研发过程. 一.准备工作 1)安装环境 首先是全局安装 yo 和 ...

  5. pytest精髓__fixture

    命令:fixture(scope='function',params=None,autouse=False,ids=None,name=None) 参数说明 scope:有四个级别参数函数" ...

  6. KingbaseES 全局临时表

    Postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享.KingbaseES 除了支持PG原生的临时表机制外,还支 ...

  7. Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):5、Maven版本发布与后续版本更新(大结局)

    文章目录: Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):1.JIRA账号注册 Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):2.PGP ...

  8. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿

    1.简介 Fiddler本身的功能其实也已经很强大了,但是Fiddler官方还有很多其他扩展插件功能,可以更好地辅助Fiddler去帮助用户去开发.测试和管理项目上的任务.Fiddler已有的功能已经 ...

  9. Exchange 2019中的Unified Messaging(UM)

    前天,刚刚安装了测试用的Exchange 2019.安装过程和之前的2016一样,非常顺利.但是在用ECP管理服务器的时候遇到了一个报错.The term 'Get-UMService' is not ...

  10. Elasticsearch:正确使用regexp搜索