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 相关文章推荐
python 多线程应用介绍
Dec 19 Python
Python多进程机制实例详解
Jul 02 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
python中的随机函数小结
Jan 27 Python
python列表的增删改查实例代码
Jan 30 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
python3判断url链接是否为404的方法
Aug 10 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
python交易记录链的实现过程详解
Jul 03 Python
如何在Django项目中引入静态文件
Jul 26 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 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
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
python实现图片压缩代码实例
2019/08/12 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
汽车维修工岗位职责
2014/02/12 职场文书
2014年创卫实施方案
2014/02/18 职场文书
创新社会管理心得体会
2014/09/12 职场文书
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android