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设计模式之观察者模式实例
Apr 26 Python
python之import机制详解
Jul 03 Python
Python中使用dom模块生成XML文件示例
Apr 05 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
python绘制直线的方法
Jun 30 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
Python基础之元类详解
Apr 29 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
Matlab如何实现矩阵复制扩充
Jun 02 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
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php上传图片类及用法示例
2016/05/11 PHP
浅谈Javascript事件模拟
2012/06/27 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
python的几种开发工具介绍
2007/03/07 Python
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
详解Python的三种可变参数
2019/05/08 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
致跳远运动员加油稿
2014/02/11 职场文书
安全生产月演讲稿
2014/05/09 职场文书
团日活动总结怎么写
2014/06/25 职场文书
介绍信模板
2015/01/31 职场文书
法律意见书范文
2015/06/04 职场文书
生日宴会祝酒词
2015/08/10 职场文书