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回调函数用法实例分析
May 09 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
Python对接支付宝支付自实现功能
Oct 10 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Python pandas对excel的操作实现示例
Jul 21 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
PHP4在Windows2000下的安装
2006/10/09 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
在Python中调用ggplot的三种方法
2015/04/08 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
python 调试冷知识(小结)
2019/11/11 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
应届毕业生个人求职信范文
2014/01/29 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
读书小明星事迹材料
2014/05/03 职场文书
稽核岗位职责
2015/02/10 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
安全温馨提示语大全
2015/07/14 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
《游戏公平》教学反思
2016/02/20 职场文书