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实现按任意键继续/退出的功能
Aug 19 Python
python Flask实现restful api service
Dec 04 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
python Django中models进行模糊查询的示例
Jul 18 Python
python如何保证输入键入数字的方法
Aug 23 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
Python实现自动装机功能案例分析
Oct 22 Python
Python Django搭建文件下载服务器的实现
May 10 Python
python之PySide2安装使用及QT Designer UI设计案例教程
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
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
django中的ajax组件教程详解
2018/10/18 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
JS获取父节点方法
2009/08/20 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
js 居中漂浮广告
2010/03/21 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
实践Vim配置python开发环境
2018/07/02 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
平面设计自荐信
2013/10/07 职场文书
技校个人求职信范文
2014/01/25 职场文书
小学六年级学生评语
2014/04/22 职场文书
会计出纳岗位职责
2015/03/31 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
导游词之山西-五老峰
2019/10/07 职场文书