Python-项目实战--飞机大战-游戏背景(5)

news2024/12/28 11:28:03

目标

  • 背景交替滚动的思路确定

  • 显示游戏背景

1.背景交替滚动的思路确定

  • 游戏启动后,背景图像会连续不断地向下方移动

  • 在视觉上产生英雄的飞机不断向上方飞行的错觉 -- 在很多跑酷类游戏中常用的套路

  • 游戏的背景不断变化

  • 游戏的主角位置保持不变

1.1实现思路分析

解决办法

  • 创建两张背景图像精灵

  • 第1张完全和屏幕重合

  • 第2张在屏幕的正上方

  • 两张图像一起向下方运动

  • self.rect.y += self.speed

  • 当任意背景精灵的rect.y >=屏幕的高度 说明已经移动到屏幕下方

  • 将移动到屏幕下方的这张图像设置到屏幕的正上方

  • rect.y = -rect.height

1.2设计背景类

初始化方法

  • 直接指定背景图片

  • is_alt判断是否是另一张图像

  • False表示第一张图像,需要与屏幕重合

  • True表示另一张图像,在屏幕的正上方

update()方法

  • 判断是否移动出屏幕,如果是,将图像设置到屏幕的正上方,从而实现交替滚动

继承 如果父类提供的方法,不能满足子类的需求:
1️⃣ 派生一个子类
2️⃣ 在子类中针对特有的需求,重写父类方法,并且进行扩展

2.显示游戏背景

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中显示背景精灵

  • __create_sprites 方法中创建精灵和精灵组

  • __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利用初始化方法,简化背景精灵创建

思考 -- 如何简化2.2节中的代码
  • 在主程序中,创建的两个背景精灵,传入了相同的图像文件路径

  • 创建第二个背景精灵时,在主程序中,设置背景精灵的图像位置

思考 -- 精灵 初始位置 的设置,应该是由 主程序负责 ,还是由 精灵自己负责
答案:由精灵自己负责
  • 根据面向对象设计原则,应该将对象的职责,封装到类的代码内部,尽量简化程序调用一方代码调用

初始化方法

  • 直接指定背景图片

  • is_alt判断是否是另一张图像

  • False表示第一张图像,需要与屏幕重合

  • True表示另一张图像,在屏幕的正上方

plane_sprites.py 中实现Background的初始化方法

plane_sprites.py
def __init__(self, is_alt=False):

        # 1.调用父类方法实现精灵的创建(image/rect/speed)
        super().__init__("./images/background.png")

        # 2.判断是否是交替图像,如果是,需要设置初始位置
        if is_alt:
            self.rect.y = -self.rect.height
plane_main.py
def __create_sprites(self):

        # 创建背景精灵和精灵组
        bg1 = Background()
        bg2 = Background(True)

        self.back_group = pygame.sprite.Group(bg1, bg2)

内容总结于:https://space.bilibili.com/37974444

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉框架OpenMMLab开源学习(三):图像分类实战

前言:本篇主要偏向图像分类实战部分,使用MMclassification工具进行代码应用,最后对水果分类进行实战演示,本次环境和代码配置部分省略,具体内容建议参考前一篇文章:计算机视觉框架OpenMMLab开源学习&#x…

计算机网络整理-问答

1. 程序工作的时候网络各层的状态 如下图所示: 1. TCP 在进行三次握手的时候,IP 层和 MAC 层对应都有什么操作呢? TCP 三次握手是通过在传输层建立连接的一个过程,在这个过程中,TCP 和 IP 层、MAC 层都起到了重要的…

ChatGPT API 本地如何调用

本文将会介绍,如何找到API文档和相应语言SDK,并使用PHP调用SDK实现本地请求API的完成过程及遇到的问题和解决方法。 API文档 1.打开官网 ChatGPT: Optimizing Language Models for Dialogue 2.找到API 3.查看文档 4.找到sdk库 OpenAI API 5.主流语言 …

2023年软考什么时候考试?

2023年软考各科目考试时间安排已确定!中国计算机技术职业资格网发布了《2023年度计算机技术与软件专业技术资格(水平)考试工作计划》,具体见下文。2023年度计算机软件资格考试(初级、中级、高级)上半年考试…

树莓派4b Raspberry Pi 4安装以前内置Python3.7版本的系统出现的一系列问题记录

今天想要重装树莓派系统,想装那种内置Python3.7版本的系统,从网上找到镜像源后烧录进去出现一系列问题: 烧录系统开机后,首先就出现报错: 上面显示一个问题就是:start4x.elf: is not compatible&#xff0…

Django自定义模板标签的使用详解

目录 1.创建子应用:python manage.py startapp test01 2.进行相关的配置 3.在新建的test01文件下创建urls.py(此处名称可变但注意上图) 4.在test01文件下创建名称为templatetags的文件夹 5.templatetags文件下继续创建几个py文件如下图​编辑 6.views视图函数…

走进独自开,带你轻松干副业

今天给大家分享一个开发者的福利平台——独自开(点击直接注册),让你在家就能解决收入问题。 文章目录一、平台介绍二、系统案例三、获取收益四、使用平台1、用户注册2、用户认证3、任务报价五、文末总结一、平台介绍 简单说明 独自开信息科技…

人工智能的未来———因果推理what if 第11章(统计模型) 文章解读

我们在观察数据当中,一般使用样本均值去估计目标人群的均值 在所有情况都是理想的情况下: 平均因果效应

Linux环境运行Maven 生成的hadoop jar包

运行命令: hadoop jar ./jar包名字 class对象路径 输入路径 输出路径 linux内部jar包测试 cd 到以下目录,创建以下文件夹 [rootreagan180 ~]# cd /opt/soft/hadoop313/share/hadoop/mapreduce/ 创建文件夹(读取路径) [roo…

ETL基础概念及要求详解

ETL基础概念及要求详解概念ETL与ELT数据湖与数据仓库ETL应用场景ETL具体流程及操作要求抽取清洗转换加载ETL设计模式SQL脚本语言ETL工具设计ETL工具SQLETL接口设计要求明确接口属性约定接口形式确定接口抽取方法规范接口格式概念 ETL即Extract(抽取)Tra…

Python学习-----无序序列1.0(字典的创建、查看、添加、修改、删除/替换)

目录 前言: 字典是什么 字典的特点 1.字典的创建 (1)直接创建{} (2)dict() 函数创建 2.字典的查询 (1)get()函数 (2)获取字典一组内容 3.字典键值对的添加 &a…

1CN/Jaccard/PA/AA/RA/Katz/PageRank/SimRank

common neighbors(CN) 公共邻居的数量。 Jaccard 用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。 preferential attachment(PA) 节点倾向于连接到节点度较高的节点上,&…

BSN-DDC基础网络详解(二):快速接入指南

本文将为大家介绍BSN算力中心方和DDC网络平台方接入DDC网络的基本流程,如下图所示,算力中心方和平台方依次执行图内左侧流程,右侧流程由DDC网络运营人员操作。01注册门户账号注册在接入之前,算力中心方和平台方需要先注册一个官方…

Android性能优化:getResources()与Binder交火导致的界面卡顿优化

欢迎:https://juejin.cn/post/7198430801851531324/ 欢迎:https://nasdaqgodzilla.github.io/2023/02/10/Android%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%EF%BC%9AgetResources-%E4%B8%8EBinder%E4%BA%A4%E7%81%AB%E5%AF%BC%E8%87%B4%E7%9A%84%E7%95%8C%E…

Neurosynth元分析——认知解码工具,软件包安装以及使用

Neurosynth元分析——认知解码工具,软件包安装以及使用 NeuroSynth 基本简介基本原理例子Neurosynth package安装及使用创建虚拟环境安装Dependencies:安装neurosynthNeurosynth使用加载必要的包下载neurosynth数据参考如上图所示。NeuroSynth 元分析感兴趣的区域沿功能连接梯…

玩转黑科技|ChatGPT保姆级注册指南(含免费手机号福利)

前言最近爆火的ChatGPT大家都应该多多少少的有所听说,各种渠道得知大家应该见识到他的强大,是不是很想上手玩一玩?但是由于其不支持中国电话号码进行注册,导致【注册ChatGPT】成了众多玩家头疼的事,也无法体验这个机器…

开源免费的WEB应用防火墙

开源免费的WEB应用防火墙 排名不分前后 资源宝分享:www.httple.net 1、南墙WEB应用防火墙(简称:)是有安科技推出的一款全方位网站防护产品。通过有安科技专有的WEB入侵异常检测等技术,结合有安科技团队多年应用安全的…

小白该从哪方面入手学习大数据

大数据本质上是海量数据。 以往的数据开发,需要一定的Java基础和工作经验,门槛高,入门难。 如果零基础入门数据开发行业的小伙伴,可以从Python语言入手。 Python语言简单易懂,适合零基础入门,在编程语言…

vue 回调函数(callback)的用法

一、介绍: 1、前提:在 js 中,函数也是对象,可以赋值给变量,可以作为参数放在函数的参数列表中,如: var doSomething function(a,b){return a b; } console.log(doSomething(2,3));2、概念&a…

神经网络基础部件-BN层详解

一,数学基础 1.1,概率密度函数 随机变量(random variable)是可以随机地取不同值的变量。随机变量可以是离散的或者连续的。简单起见,本文用大写字母 XXX 表示随机变量,小写字母 xxx 表示随机变量能够取到…