上回继续,之前的游戏背景过于单调,今天加几朵白云的背景效果。

要点:

1. 白云要有大有小,尽量模拟出远近层次的效果。

2. 兔子向上跳时,(背景)白云也要相应的滚动,但是为了视觉效果,速度要低于档板的速度(比如:1/2 or 1/3)。

3. 白云要放在最下层(即:Layer值最低),否则就会把其它物体挡住。

先定义白云:

# 白云背景
class Cloud(pg.sprite.Sprite):
def __init__(self, game, x, y, scale=1):
pg.sprite.Sprite.__init__(self)
self.game = game
self.image = self.game.spritesheet.get_image("cloud.png", scale)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y

  
main.py中初始化:

    def new(self):
self.score = 0
self.all_sprites = pg.sprite.LayeredUpdates()
...
self.clouds = pg.sprite.Group()
... # 初始化生成白云
for i in range(2, 4):
scale = random.choice([2.5, 3.0, 3.5, 4.0, 4.5])
c = Cloud(self, random.randrange(0, WIDTH), random.randrange(-100, HEIGHT), scale)
self.all_sprites.add(c, layer=CLOUD_LAYER)
self.clouds.add(c) ...

其中常量CLOUD_LAYER的值,仍在settings.py中定义:

# layer
PLAYER_LAYER = 4
MOB_LAYER = 3
PLATFORM_LAYER = 1
POWERUP_LAYER = 2
CLOUD_LAYER = 0

  

update时,更新白云的滚动效果,以及数量不足时,自动补足:

    def update(self):
self.all_sprites.update() ... if self.player.rect.top < HEIGHT / 4:
self.player.pos.y += max(abs(self.player.vel.y), 2)
...
# 屏幕滚动时,白云也自动滚动(注:为了视觉效果更自然,滚动速度是挡板的1半)
for cloud in self.clouds:
cloud.rect.top += max(abs(self.player.vel.y) // 2, 2)
if cloud.rect.top > HEIGHT:
cloud.kill() ... # cloud不够时,自动补充
while len(self.clouds) <= 3 and self.player.rect.bottom < HEIGHT:
scale = random.choice([2.5, 3.0, 3.5, 4.0, 4.5])
c = Cloud(self, random.randrange(0, WIDTH), random.randrange(-200, -50), scale)
self.all_sprites.add(c, layer=CLOUD_LAYER)
self.clouds.add(c)

  

示例源码:https://github.com/yjmyzz/kids-can-code/tree/master/part_18

pygame-KidsCanCode系列jumpy-part18-背景滚动的更多相关文章

  1. 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9344721 作者:七十一雾央 新浪微博:http:// ...

  2. 【Visual C++】游戏编程学习笔记之五:单一背景滚动

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...

  3. 一款非常炫酷的jQuery动态随机背景滚动特效

    一款非常炫酷的jQuery动态随机背景滚动特效 图片背景会不停息的滚动,带有那种漂浮的视觉效果,小圈圈飘动. 更好的是还兼容IE6浏览器,大伙可以好好研究研究. 适用浏览器:IE6.IE7.IE8.3 ...

  4. HTML5 精灵8方向移动+背景滚动+音效播放+鼠标事件响应

    如何清空画布 通过调用函数 ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);   如何实现背景滚动 首先我们准备了一张2532*940 ...

  5. JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动

    一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...

  6. Cocos2d-x3.0游戏实例《不要救我》三——背景滚动周期

    好.让我们来解释一下这个无限循环滚动的背景.这方面的知识一直讲到烂.我以前的文章还介绍了.所以不是那么特别清楚. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www. ...

  7. Bootstrap学习笔记系列7-----Bootstrap简单背景CSS及其他辅助类

    背景 通过添加下列类,可以快捷的变换背景颜色,如果是链接的话,鼠标移动上去会变暗 bg-primary 被修饰元素将会应到primary类,显示吃淡蓝色,文本颜色会变成白色. bg-success 被 ...

  8. Hexo瞎折腾系列(2) - 添加背景图片轮播

    动态背景图片插件jquery-backstretch jquery-backstretch是一款简单的jQuery插件,可以用来设置动态的背景图片,以下是官方网站的介绍. A simple jQuer ...

  9. PHP程序员7小时学会Kotlin系列 - 第一小时 背景

    基础知识 Kotlin简单的说是Java语言的改良版本,是一种静态类型编程语言,可运行于JVM.Andoid或JavaScript环境,于2016年2月15日发布1.0正式版.Kotlin定位于一门通 ...

  10. 做模态弹框的时候,防止背景滚动方法 移动端 html5

    $(window.document).bind("touchmove", function() { return false; });

随机推荐

  1. wb 黑名单批量操作

    0. 参考 yu961549745/WeiboBlackList  微博批量拉黑 1. 代码 block.py 更新内容:多线程,urllib.request 改为 requests + sessio ...

  2. selenium相关:通过location 和 size 获取元素所在像素位置和尺寸,截取图片ROI

    1.实验 #https://captcha.luosimao.com/demo/ chrome default: location 不滚动,直接返回相对整个html的坐标 {'x': 15.0, 'y ...

  3. 对线性回归,logistic回归和一般回归

    对线性回归,logistic回归和一般回归 [转自]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述 ...

  4. npm淘宝镜像的设置和删除

    设置 npm config set registry https://registry.npm.taobao.org npm config set disturl https://npm.taobao ...

  5. 微信小程序—文件系统

    文件系统 文件系统是小程序提供的一套以小程序和用户维度隔离的存储以及一套响应的管理接口.通过wx.getFilesSystemManager()可以获取到全局唯一的文件管理器,所有文件管理操作通过Fi ...

  6. PHP页面间传值的几种方法

    方法一:require_once //Page a: <?php $a = "hello"; ?> //Page b: <?php require_once &q ...

  7. C++实现--最大公因数和最小公倍数

    一丶 最大公因数求法: 辗转相除法(也称欧几里得算法)原理:   二丶最小公倍数求法:两个整数的最小公倍数等于两整数之积除以最大公约数   C++ 代码实现 #include <iostream ...

  8. Redis闪退解决办法

    复杂办法! cmd 进入命令,cd进入redis文件 输入:redis-server.exe redis.windows.conf,手动开启! 简单办法,删除重新下载! 不确定办法如下 1.在解压的r ...

  9. 自定义PDO封装类

    <?php class Db { protected static $_instance = null; // 定义标识符(通过$_instance值得改变情况,来判定Model类是否被实例化) ...

  10. cookie的基本操作

    设置,读取,删除 var odate=new Date(); odate.setDate(odate.getDate()+14); document.cookie='user=blue;expires ...