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中利用原始套接字进行网络编程的示例
May 04 Python
日常整理python执行系统命令的常见方法(全)
Oct 22 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
python增加矩阵维度的实例讲解
Apr 04 Python
对python中Json与object转化的方法详解
Dec 31 Python
python实现名片管理系统项目
Apr 26 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
python用match()函数爬数据方法详解
Jul 23 Python
Django中URL的参数传递的实现
Aug 04 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
mysq GBKl乱码
2006/11/28 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python笔记(叁)继续学习
2012/10/24 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python与字符编码问题
2019/05/24 Python
基于python使用tibco ems代码实例
2019/12/20 Python
python3爬取torrent种子链接实例
2020/01/16 Python
python调用win32接口进行截图的示例
2020/11/11 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
毕业设计说明书
2014/05/07 职场文书
小学感恩节活动总结
2015/03/24 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书