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

要点:

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. 求自然数幂和 B - The Sum of the k-th Powers CodeForces - 622F

    题解: 很多方法 斯特林数推导略麻烦但是不依赖于模数 代码: 拉格朗日插值 由于可以证明这是个K+1次多项式于是可以直接用插值 #include <bits/stdc++.h> using ...

  2. 【BZOJ3697】采药人的路径

    题解: 比较简单的点分治 首先暴力的话直接枚举 然后枚举另一个点的时候顺便看一下有没有零点 n^2 考虑点分治 分治之后用f[i][0/1]表示权值为i,有没有零点的方案数 我们来证明一件事情,如果两 ...

  3. python全栈开发day55-mysql外键的三种变种

    一.昨日内容回顾 二.今日内容总结 三.mysql应知必会 你可以通过INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表来查看. select * from INFORMATI ...

  4. linux 软中断过高性能优化案例

    案例如下: 发现cpu0上的软中断高达50%

  5. Nessus忘记密码的解决

    进入到Nessus安装目录下

  6. 分布式配置 Spark 2.0版本 2.1版本 1.6版本

    apache的各个软件各个版本下载:  http://archive.apache.org/dist/ 1.下载spark. sudo tar -zxf ~/下载/spark-2.0.2-bin-wi ...

  7. ELK 环境搭建2-Kibana

    一.安装前准备 1.节点 192.168.30.41 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-linux-x64.tar.gz b.Kibana kiba ...

  8. input时间表单默认样式修改(input[type="date"])

    一.时间选择的种类: HTML代码:选择日期:<input type="date" value="2018-11-15" /> 选择时间:<i ...

  9. Codeforces Round #517 体验记

    原文链接 https://www.cnblogs.com/zhouzhendong/p/CF1071.html 赛前: 呀,这个 Round # 必须打啊. 于是临时改变注意决定打这一场.用小号打. ...

  10. Jupyter运行时出现下面的错误:Unexpected error while saving file: arma/Untitled.ipynb [Errno 13] Permission denied:

    运行环境:Ubuntu16.04+Python2.7执行如下代码修改Jupyter的一部分文件的权限(执行完之后重新启动即可): sudo chmod ~/.local/share/jupyter/ ...