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编写一个简单的FUSE文件系统的教程
Apr 02 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python操作mongodb的9个步骤
Jun 04 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
python退出循环的方法
Jun 18 Python
python3美化表格数据输出结果的实现代码
Apr 14 Python
浅谈python中的多态
Jun 15 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开发中常用的字符串操作函数
2011/02/08 PHP
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
详解Python的单元测试
2015/04/28 Python
python实现计算倒数的方法
2015/07/11 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
python实现狄克斯特拉算法
2019/01/17 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
python 如何快速复制序列
2020/09/07 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
优秀教师感人事迹材料
2014/05/04 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书