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 理解 精灵 和 精灵组相关推荐

  1. Python pygame,精灵和精灵组

    plane_sprites.py(模块,定义派生精灵子类,继承pygame.sprite.Sprite): import pygame# 自定义的派生精灵子类,继承pygame.sprite.Spri ...

  2. python精灵和精灵组_Pygame精灵和精灵组

    Pygame精灵和精灵组 Pygame 提供了两个类 pygame.sprite.Sprite -- 存储 图像数据 image 和 位置 rect 的 对象 pygame.sprite.Group ...

  3. Python精灵和精灵组

    plane_sprites.py import pygame# 如果一个类的父类不是object # 在重写初始化方法时,一定要先super()一下父类的__init__方法 # 保证父类中实现的__ ...

  4. Python_精灵和精灵组

    1. 基本概念 接下来介绍两个pygame中提供的高级类, 精灵和精灵组. 在介绍这两个类之前, 先来共同回顾一下到目前为止掌握的游戏开发套路. 在游戏初始化,需要加载一下游戏中所有的图像, 然后呢, ...

  5. pygame中的监听事件以及精灵和精灵组

    pygame监听事件以及精灵和精灵组 文章目录 pygame监听事件以及精灵和精灵组 1.游戏循环中监听事件 1.事件(event) 2.监听 3.代码实现 二.理解精灵和精灵组 1.精灵 2.精灵组 ...

  6. 精灵与精灵组的常用属性

    精灵常用的属性 pygame.sprite.Sprite.update - 控制精灵行为的方法 pygame.sprite.Sprite.add - 将精灵添加到组 pygame.sprite.Spr ...

  7. python做按键精灵脚本_使用Python实现一个按键精灵 | 蓝士钦

    @HANK1998 其实,你这个代码,还有一个问题,鼠标键盘动作回放时,顺序会乱,线程同步问题,做不到鼠标动作和键盘动作交叉执行.,,我能力不太够了,,学的不深,不知道这个问题你解决没??? ---- ...

  8. cocos2dx学习之路(七)——精灵、精灵旋转、淡入、水平翻转、自由移动、九宫格精灵

    理解精灵的含义 学会创建一个精灵 掌握对精灵的控制 了解九宫格精灵及其应用 Sprite在2D游戏场景设计中指的就是像素图可以移动可以控制 1.通过图片路径创建精灵 Sprite* sprite = ...

  9. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

最新文章

  1. boost::histogram::make_weighted_profile用法的测试程序
  2. 四篇关于恶意软件对抗方面的paper要点
  3. Java笔记-对tomcat进一步认识
  4. 95-864-040-源码-HDFS-Flink 和 HDFS 的交互
  5. java小数丢失精度_Java中的小数运算与精度损失
  6. HDU 1565 方格取数(简单状态压缩DP)
  7. 通用电气联手软银 签署Predix软件许可协议
  8. 电商项目——初识电商——第一章——上篇
  9. 战略管理与资本运作案例剖析
  10. 使用Eclipse IDE的技巧
  11. HTML为什么称为超文本标记语言?< DOCTYPE html>什么意思?
  12. ResNet详解:ResNet到底在解决什么问题?
  13. goland-gopath
  14. Python ACM模式
  15. android 文件删除不了
  16. Linux环境java截取视频某帧另存缩略图
  17. 如何从TI官方网站导入例程
  18. 应急响应之windows日志排查
  19. python数据分析基础001 -matplotlib的基础绘图
  20. msdn 原镜像 U盘安装纯系统

热门文章

  1. Mysql数据表一直显示使用中
  2. 8/11 Perl和Postgresql联合在京交流会 Perl6项目经理远道参加
  3. zjs-my-diary-20200527
  4. 2019.8.10小结
  5. 关于字符串中length与length()的区别
  6. vue-pdf vue中导入文件 并预览
  7. 图像分类之:经典机器学习 Battle 深度学习
  8. 读论文-OVSeg-基于遮罩自适应CLIP的开放词汇语义分割-Open-vicabulr semantic segmentation with mask-adaptived CLIP
  9. 怎么登陆163邮箱?163的邮箱有哪些实用技巧?
  10. C语言编程练习:打印九九口诀表