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 09 Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
Python 迭代器工具包【推荐】
May 06 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
python制作mysql数据迁移脚本
Jan 01 Python
python 读取文件并把矩阵转成numpy的两种方法
Feb 12 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
PyCharm Community安装与配置的详细教程
Nov 24 Python
利用python进行文件操作
Dec 04 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
php异常处理使用示例
2014/02/25 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
关于python2 csv写入空白行的问题
2018/06/22 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
python pandas生成时间列表
2019/06/29 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Django nginx配置实现过程详解
2020/09/10 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
Linux的文件类型
2012/03/07 面试题
母亲节寄语大全
2015/02/27 职场文书
在人间读书笔记
2015/06/30 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers