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中用Decorator来简化元编程的教程
Apr 13 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
Apr 20 Python
django的登录注册系统的示例代码
May 14 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
Python实现Linux监控的方法
May 16 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
py-charm延长试用期限实例
Dec 22 Python
django rest framework使用django-filter用法
Jul 15 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 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
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
python获取本地计算机名字的方法
2015/04/29 Python
Python生成不重复随机值的方法
2015/05/11 Python
python通过socket查询whois的方法
2015/07/18 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
Python csv模块使用方法代码实例
2019/08/29 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
超市商业计划书
2014/05/04 职场文书
整改报告怎么写
2014/11/06 职场文书
学习经验交流会策划书
2015/11/02 职场文书
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android