背景交替滚动
游戏启动后,背景图像不断的向下移动
在视觉上产生角色不断向上移动的错觉
游戏背景不断变化,游戏主角的位置报错不变
 
实现方案
  1. 创建两张背景图
  2. 第一张完全和屏幕重合,第二章在屏幕的正上方
  3. 两种图像一起向下运动,当当前角色的 rect.y>=屏幕高度时,说明已经移动到欧美下方
  4. 将移动到屏幕下方的这张图像,设置到屏幕的正上方,rect.y = -rect.height,以此循环
 
设计背景类

"""游戏背景精灵""" class Background(GameSprite): def update(self):
# 调用父类的update方法实现移动
super().update()
# 重写父类update方法,判断是否移出屏幕
if self.rect.y >= SCREEN_RECT.height:
#如果移出屏幕,将图像设置到屏幕上方
self.rect.y = -self.rect.height
 
背景图像的交替实现
#plane_main.py

# 私有方法-创建精灵、精灵组
def __create_sprites(self):
# 创建两个背景精灵
background_1 = Background('./images/background.png', 1)
background_2 = Background('./images/background.png', 1)
# 将第二个背景精灵的y值设置为图片的高度
background_2.rect.y = background_2.rect.height
# 将背景精灵加入精灵组,实现循环滚动
self.back_group = pygame.sprite.Group(background_1,background_2) # 私有方法-更新精灵组
def __update_sprites(self):
self.back_group.update() # 更新精灵组所有精灵
self.back_group.draw(self.screen) # 绘制精灵组图像
 
利用初始化方法,简化背景精灵的创建
"""游戏背景精灵""" class Background(GameSprite): def __init__(self, is_alt=False): # 调用父类方法,完成精灵的创建 super().__init__('./images/background.png', 1) # is_alt字段判断是否是交替图像,如果是,需要设置初始位置 if is_alt: self.rect.y = -self.rect.height def update(self): # 调用父类的update方法实现移动 super().update() # 重写父类update方法,判断是否移出屏幕 if self.rect.y >= SCREEN_RECT.height: # 如果移出屏幕,将图像设置到屏幕上方 self.rect.y = -self.rect.height
class Background(GameSprite):

    def __init__(self, is_alt=False):
# 调用父类方法,完成精灵的创建 super().__init__('./images/background.png', 1) # is_alt字段判断是否是交替图像,如果是,需要设置初始位置
if is_alt:
self.rect.y = -self.rect.height
    # 私有方法-创建精灵、精灵组
def __create_sprites(self):
# 创建两个背景精灵加入精灵组,实现循环滚动
background_1 = Background()
background_2 = Background(True) # 设置True表示交替背景,设置位置
self.back_group = pygame.sprite.Group(background_1,background_2)
 

7.pyagem-游戏背景的更多相关文章

  1. 【Cocos2d-X开发学习笔记】第26期:游戏背景之滚动地图背景(CCParallaxNode)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 在现实生活中,当我们身处一辆快速行驶的车上,用眼 ...

  2. Android_(游戏)打飞机02:游戏背景滚动

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  3. 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.贴图地图类CCTileMapAtlas 除了 ...

  4. cocos2dx游戏--欢欢英雄传说--添加游戏背景

    经过一段时间的学习cocos2dx,接下来我想要实践开发一个小游戏,我把它命名为“欢欢英雄传说”,项目名将取为HuanHero.环境:cocos2dx环境:cocos2d-x 3.11.1IDE:Co ...

  5. Atitit 游戏的原理与概论attilax总结

    Atitit 游戏的原理与概论attilax总结 1. 游戏历史2 1.1.1. 盘点PC游戏史上最重要的50款游戏2 1.1.2. 回味人类文明进程 五款经典的历史游戏2 2. 游戏类型(主要分为6 ...

  6. fly bird

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. cocos2dx 实现flappybird

    前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...

  8. jQuery最基础最全面的选择器大览

    一.基本选择器     1.标签选择器 (element):根据给定的标签名匹配元素 eg:$("h2")选取所有h2元素 --- 返回元素集合 2.类选择器 (.class):根 ...

  9. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  10. Unity3D游戏开发初探—4.开发一个“疯狂击箱子”游戏

    一.预备知识—对象的”生“与”死“ (1)如何在游戏脚本程序中创建对象而不是一开始就创建好对象?->使用GameObject的静态方法:CreatePrimitive() 以上一篇的博文中的“指 ...

随机推荐

  1. 个人学习-STL深入学习01-vectory源码研习 // 需要补充

    参考资料: [1]博主:一枚程序员 STL源码剖析--vector https://www.cnblogs.com/sooner/p/3273395.html [2]博主:劲蜡鸡腿堡 vector源码 ...

  2. 10种有用的Linux Bash_Completion 命令示例

    摘要:我们可以对这个 bash 补全进行加速,并使用 complete 命令将其提升到一个新的水平. 本文分享自华为云社区<有用的 Linux Bash_Completion 命令示例(Ster ...

  3. docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

    一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...

  4. mybatisplus-ActiveRecord 模式

    ActiveRecord 模式 直接调用Model对象来进行增删改查. 实体类只需继承 Model 类即可进行强大的 CRUD 操作 需要项目中已注入对应实体的BaseMapper 实体类User 点 ...

  5. Java使用定时任务详解

    定时任务 目录 定时任务 SpringBoot定时任务 默认单线程 使用异步多线程 Spring定时任务XML配置(注解形式几乎同上) 使用springTask: ----springTask为spr ...

  6. Configuration的学习

    创建 //1.创建,调用的空惨 Configuration conf = new Configuration(); 加载主配置 //2.读取主配置文件==>如果是空参方法则自动加载sec下的re ...

  7. openstack中Cinder组件简解

    一,Cinder组件介绍 概念 cinder组件作用: 块存储服务,为运行实例提供稳定的数据块存储服务 块存储服务,提供对 volume 从创建到删除整个生命周期的管理 二,常用操作 1.Volume ...

  8. JAVA反序列化漏洞修复解决方法

    MyObject类建立了Serializable模块,而且重新写过了readObject()变量,仅有建立了Serializable模块的类的目标才能够被实例化,沒有建立此模块的类将无法使他们的任意状 ...

  9. .NET 反向代理-YARP

    什么是 YARP YARP (另一个反向代理) 设计为一个库,提供核心代理功能,你可以根据应用程序的特定需求进行自定义. YARP 是使用 .NET的基础架构构建在 .NET上的.YARP 的主要不同 ...

  10. stm32fxx_hal_i2c.c解读之HAL_I2C_Mem_Write

    HAL_I2C_Mem_Write()函数位于stm32fxx_hal_i2c.c文件的2432行,源代码对该函数的解释如下图 HAL_StatusTypeDef HAL_I2C_Mem_Write( ...