python飞机大战pygame游戏背景设计详解


Posted in Python onDecember 17, 2019

本文实例讲述了python飞机大战pygame游戏背景设计。分享给大家供大家参考,具体如下:

目标

背景交替滚动的思路确定

  • 显示游戏背景

01. 背景交替滚动的思路确定

运行 备课代码,观察 背景图像的显示效果:

  • 游戏启动后,背景图像 会 连续不断地 向下方 移动
  • 在 视觉上 产生英雄的飞机不断向上方飞行的 错觉 —— 在很多跑酷类游戏中常用的套路
    • 游戏的背景 不断变化
    • 游戏的主角 位置保持不变

1.1 实现思路分析

python飞机大战pygame游戏背景设计详解
解决办法

  1. 创建两张背景图像精灵
    • 第 1 张 完全和屏幕重合
    • 第 2 张在 屏幕的正上方
  2. 两张图像 一起向下方运动
    • self.rect.y += self.speed
  3. 当 任意背景精灵 的 rect.y >= 屏幕的高度 说明已经 移动到屏幕下方
  4. 将 移动到屏幕下方的这张图像 设置到 屏幕的正上方
    • rect.y = -rect.height

1.2 设计背景类

python飞机大战pygame游戏背景设计详解

  • 初始化方法
    • 直接指定 背景图片
    • is_alt 判断是否是另一张图像
      • False 表示 第一张图像,需要与屏幕重合
      • True 表示 另一张图像,在屏幕的正上方
  • update() 方法
    • 判断 是否移动出屏幕,如果是,将图像设置到 屏幕的正上方,从而实现 交替滚动

继承 如果父类提供的方法,不能满足子类的需求:

  • 派生一个子类
  • 在子类中针对特有的需求,重写父类方法,并且进行扩展

02. 显示游戏背景

2.1 背景精灵的基本实现

  • 在 plane_sprites 新建 Background 继承自 GameSprite
class Background(GameSprite):
  """游戏背景精灵"""

  def update(self):

    # 1. 调用父类的方法实现
    super().update()

    # 2. 判断是否移出屏幕,如果移出屏幕,将图像设置到屏幕的上方
    if self.rect.y >= SCREEN_RECT.height:
      self.rect.y = -self.rect.height

2.2 在 plane_main.py 中显示背景精灵

  1. 在 __create_sprites 方法中创建 精灵 和 精灵组
  2. 在 __update_sprites 方法中,让 精灵组 调用 update() 和 draw() 方法

__create_sprites 方法

def __create_sprites(self):

  # 创建背景精灵和精灵组
  bg1 = Background("./images/background.png")
  bg2 = Background("./images/background.png")
  bg2.rect.y = -bg2.rect.height
  
  self.back_group = pygame.sprite.Group(bg1, bg2)

__update_sprites 方法

def __update_sprites(self):

  self.back_group.update()
  self.back_group.draw(self.screen)

2.3 利用初始化方法,简化背景精灵创建

思考 —— 上一小结完成的代码存在什么样的问题?能否简化?

  • 在主程序中,创建的两个背景精灵,传入了相同的图像文件路径
  • 创建 第二个 背景精灵 时,在主程序中,设置背景精灵的图像位置

思考 —— 精灵 初始位置 的设置,应该 由主程序负责?还是 由精灵自己负责?

答案 —— 由精灵自己负责

  • 根据面向对象设计原则,应该将对象的职责,封装到类的代码内部
  • 尽量简化程序调用一方的代码调用

python飞机大战pygame游戏背景设计详解

  • 初始化方法
    • 直接指定 背景图片
    • is_alt 判断是否是另一张图像
      • False 表示 第一张图像,需要与屏幕重合
      • True 表示 另一张图像,在屏幕的正上方

在 plane_sprites.py 中实现 Background 的 初始化方法

def __init__(self, is_alt=False):

  image_name = "./images/background.png"
  super().__init__(image_name)
    
  # 判断是否交替图片,如果是,将图片设置到屏幕顶部
  if is_alt:
    self.rect.y = -self.rect.height

修改 plane_main 的 __create_sprites 方法

# 创建背景精灵和精灵组
bg1 = Background()
bg2 = Background(True)

self.back_group = pygame.sprite.Group(bg1, bg2)

更多关于Python相关内容可查看本站专题:《Python游戏开发技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
最大K个数问题的Python版解法总结
Jun 16 Python
Python中判断输入是否为数字的实现代码
May 26 Python
python让列表倒序输出的实例
Jun 25 Python
Python中Numpy mat的使用详解
May 24 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
用python写测试数据文件过程解析
Sep 25 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
python实现名片管理器的示例代码
Dec 17 #Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 #Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 #Python
基于Django实现日志记录报错信息
Dec 17 #Python
python实现12306登录并保存cookie的方法示例
Dec 17 #Python
Django多进程滚动日志问题解决方案
Dec 17 #Python
python django中8000端口被占用的解决
Dec 17 #Python
You might like
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
PHP4实际应用经验篇(9)
2006/10/09 PHP
php socket方式提交的post详解
2008/07/19 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
详解js异步文件加载器
2016/01/24 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
python根据多个文件名批量查找文件
2019/08/13 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Django models filter筛选条件详解
2020/03/16 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
银行毕业实习自我鉴定
2013/09/19 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
中专自我鉴定
2014/02/05 职场文书
七年级历史教学反思
2014/02/05 职场文书
高一数学教学反思
2014/02/07 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python