中级篇——企鹅下楼梯2

疑惑篇

点击绿旗按钮开始游戏,企鹅会从舞台上方自动下落,使用左右按键控制企鹅移动。企鹅血量归零或掉落舞台底部,游戏结束。

视频演示open in new window

亲自操作open in new window

【线索篇】

案例分析

它们发生的场景是什么?

每个场景中有哪些角色?

每个场景中的每个角色在做什么?

企鹅下楼梯1基础上改动:

  1. 增加血量,在舞台顶部显示,血量可以减少或增加。
  2. 游戏区域顶部增加尖刺,企鹅碰到尖刺,血量减1,企鹅会下降一段距离。
  3. 企鹅降落普通踏板,血量加1。
  4. 增加空心踏板,企鹅站在上面0.5秒后,会自动掉落。
  5. 增加左右传输带踏板,企鹅站在上面会自动朝着传送带方向左右移动。
  6. 增加尖刺踏板,企鹅站上尖刺踏板血量减1,同时身体变为受伤状态。
  7. 企鹅碰到游戏区域底部或血量为0时,游戏结束。

积木提示

当绿旗被点击

移到([随机位置])

移到x:(0) y:(0)

面向(90)方向

将x坐标增加(10)

将y坐标增加(10)

将旋转方式设为[左右翻转]

y坐标

换成([造型1])造型

下一个造型

显示

隐藏

播放声音([喵])等待播完

播放声音([喵])

当接收到[消息1]

广播[消息1]

等待(1)秒

重复执行(10)次

重复执行

如果<>那么

如果<>那么否则

重复执行直到<>

停止[全部脚本]

当作为克隆体启动时

克隆[自己]

删除此克隆体

碰到颜色(颜色)?

颜色(颜色)碰到(颜色)?

按下([空格])键?

减法

乘法

在(1)和(10)之间取随机数

大于

小于

等于

建立一个变量

使用变量

将[我的变量]设为(0)

将[我的变量]增加(1)

注意事项

  1. 多个条件判断如何嵌套执行
  2. 多个指令串并行执行对程序的影响

【解决篇】

上篇文章中我们已经实现了游戏的基础的功能,这次我们就在之前的基础上,增加更多的游戏元素。

1. 增加血量,在舞台顶部显示,血量可以减少或增加。

在之前的游戏中,企鹅只要一碰到游戏区顶部和底部游戏就结束了,现在我们可以尝试着给企鹅增加血量属性,让它做某些事情后,只是掉血,游戏不会立即结束。

先在背景上增加文字“血量”。

你可以添加一个血量角色,利用矩形工具画出几个方格代表血量。每种血量状态使用一个造型,对角色增加或者减少后只需要切换不同的造型即可。

最后,再把血量角色拖动到“血量”文字后面。

使用这种方式显示血量会有一个问题,画出的总血量是固定的。如果要改变总血量,就必须修改造型。如果你学完了高级篇,可以尝试利用克隆来动态生成血量。

接下来需要考虑如果控制掉血和加血?

注意我们的造型顺序是按照满血到空血排列的,所以第一种你可能想到的方式,使用下一个造型积木就可以掉血。

如何加血呢?如果有上一个造型积木是不是就可以加血了。Scratch中只提供了上一个背景积木,却没有上一个造型积木,想一想能不能自己造一个?

下一个造型积木切换时是把造型编号递增,反过只要将造型编号递减就是上一个造型积木了。如何将造型编号递减?很简单,获取到当前的造型编号减1即可。

除了这种方式之外,还有没有别的方式可以掉血和加血?

你可以想一想,我们的血量是不是像是一个数字。没血时,血量=0;1滴血时,血量=1;2滴血时,血量=2,以此类推。血量等于会变的数字,想到了什么?

没错,你可以建立一个变量叫做“血量”,变量值的数字就是血量值。接着,如何利用变量切换对应的造型呢?

你可以将每个造型的名字按照“血量”+数字的规则命名。例如,空血就是“血量0”,1滴血就是“血量1”。

现在使用连接(苹果 )和(香蕉)积木和“血量”变量就可以连接出每个造型的名称,再将它作为换成([造型1])造型积木的参数,就可以切换到对应的血量造型。

现在要掉血和减血时,应该怎么做?很简单,在初始化变量的地方将血量值设置为满血值,在这个案例中就是5。

接着,血量角色当接收到[开始游戏]消息时,不停的利用上面说的方式切换造型。

最后,只需要在掉血和加血的地方使用将[血量]增加(1)积木增减血量变量值即可。

现在你可以动手将上面两种方法都试一试,看看舞台上的血量能否正常的变化了。

2. 游戏区域顶部增加尖刺,企鹅碰到尖刺,血量减1,企鹅会下降一段距离。

接下来开始增加游戏道具。首先,将顶部增加一排尖刺,企鹅在碰到顶部时不再直接游戏结束,改为血量减1。

尖刺可以直接在背景上画出来,或者单独添加一个角色画出来。先用矩形工具画一个长方形,接着使用直线工具画出一个三角形,然后不断复制三角形,将它们拖上去把长方形填满。

如何判断企鹅是否碰到尖刺呢?有很多不同的方法。因为顶部尖刺的坐标是固定的,你可以利用企鹅的y坐标值进行判断。

除了使用坐标判断,你还可以使用碰到颜色(颜色)?积木判断。同样,拾取颜色时记得使用滴管工具。

如果你是使用角色作为尖刺,那还可以使用碰到([鼠标指针])?积木判断。

接着,当企鹅碰到尖刺时需要它做些什么?首先血量要减1。你可以播放一个被刺的音效。然后让企鹅变红闪烁一下,像是受伤了。如何闪烁,这里最好使用将[颜色]特效设定为(0)积木,而不是单独制作受伤的造型,进行造型切换。你可以想一想为什么?(提示:企鹅站立或走路是否都会受伤)

最后,企鹅不能穿过尖刺,所以还要让它下降一段距离。这里需要注意,别忘了我们实际移动的是碰撞侦测角色,企鹅只是在跟随碰撞侦测角色移动。让企鹅给碰撞侦测角色发条消息,碰撞侦测角色收到消息后向下移动一段距离。

3. 企鹅降落普通踏板,血量加1。

既然企鹅的血量会减少,你也可以考虑让它能够回血。例如,当他降落到踏板上时,血量加1。

在这里有两个问题。第一个问题和之前降落到踏板播放音效一样,每个踏板血量只能加1次。所以,加血的操作应该和播放音效放在一起。

第二个问题要请你自己先测试一下。点击绿旗开始游戏,开始你操作的很顺利,来回在不同的踏板上移动。这时你不小心碰到了顶部的尖刺,可是血量却没有减少?这是为什么?

你可以勾选上血量旁边的复选框,查看一下此时的血量是多少。

因为在增加血量时,对血量值的范围没有做限制,所以血量会一直增加,超过了游戏设定的最大血量。此时血量角色的换成([造型1])造型积木找不到对应名称的造型,一直停留在满血状态。

如何处理这个bug?只需要在加血的地方增加一个判断,如果血量<5才将血量加1。这样一来,当血量恢复满血时就不会在进行增长。

当然你还可以将数字5使用一个变量代替,例如叫“总血量”,这样当需要修改总血量时,只用修改该变量即可。

4. 增加空心踏板,企鹅站在上面0.5秒后,会自动掉落。

接下来,我们开始增加不同的踏板类型。首先制作一个空心踏板,它的作用是企鹅只能在上面停留很短的时间。超过设定时间,踏板就像是会自动消失一样让企鹅掉落下去。

在踏板角色中复制原有的造型,然后更改踏板的颜色。当然你也可以考虑将空心踏板作为新角色添加,这样一来它就需要复制很多原有踏板的操作。

造型添加完成,如何让它出现在舞台上?

当踏板被克隆之前或是当作为克隆体启动时,我们为它随机选择一个造型。

点击绿旗按钮测试一下,现在已经可以出现新的踏板了。可是企鹅并不会在踏板上停留,应该如何处理?

企鹅之所以能够在原有踏板上停留,是因为我们在碰撞侦测角色中增加了判断,当它碰到踏板颜色时,那么就让它跟随踏板的速度向上移动。现在只需要将原有判断增加一个条件,如果碰撞侦测角色碰到了普通踏板或者碰到了空心踏板,它都会向上移动。这里的碰撞侦测依然使用颜色(颜色)碰到(颜色)?积木进行。

点击绿旗按钮测试一下,企鹅已经能够在两种踏板上停留。

接下来,如何让企鹅只能在空心踏板上停留很短的时间?

你可以这样去考虑,我们现在是通过颜色判断两个角色是否发生碰撞,如果企鹅站上空心踏板时,我们修改一下踏板的颜色或亮度,之前的判断就不会再成立,企鹅就会掉下去。

给踏板角色使用一个新的当作为克隆体启动时积木,利用踏板的造型名称或编号判断一下当前的踏板类型,如果它是空心踏板,就不停侦测它是否碰撞到企鹅,如果碰到了,那么在很短时间后调整踏板的亮度,企鹅下落后再重新恢复原样。(这里会有一个小bug,有时企鹅和踏板之间会有很小一段距离,导致踏板侦测不到企鹅)

重新点击绿旗按钮进行测试,现在企鹅在空心踏板上停留0.5秒后就会自动掉落下去。

现在还有一个问题,之前我们碰到踏板时,企鹅的血量会加1。现在有了两种踏板,我只希望它碰到普通踏板时才会加血,碰到空心踏板时不会加血,应该怎么办?

是不是需要给加血的判断再增加一个条件,如果碰到的是普通踏板,并且血量小于5,那么血量加1。

5. 增加左右传输带踏板,企鹅站在上面会自动朝着传送带方向左右移动。

现在,再来增加两个类似传送带,可以让企鹅在上面滑动的踏板。同样的,再复制两个踏板造型,将它们换成不同的颜色。然后使用直线和圆工具在踏板上画出左右滚动的效果。

接着,需要做什么事情?和空心踏板一样,我们先要让他们显示出来。很简单,修改一下踏板角色切换造型的随机数范围,现在有4个造型,随机数的取值范围改成1~4。

点击绿旗按钮进行测试,两种传送带已经可以正常的出现在舞台上,但是企鹅碰到它们时不会站立。同样的,还是在碰撞侦测角色判断颜色的地方,增加这两种踏板的颜色。只要碰撞侦测角色碰到这四种踏板的任意一种颜色,就会跟随踏板向上移动。注意这里使用的是积木进行逻辑判断,想一想为什么?

接着,传送带不止要让企鹅跟随它向上移动,它们还会让企鹅朝着传送带的方向左右移动。如何实现?只需要让碰撞侦测角色判断一下现在是否站在传送带上,如果是,就增减它的x坐标值,让它左右移动。具体移动的速度是多少呢?传送带的速度应该要比企鹅左右移动的速度慢一些,这样它才能对抗传送带,向相反的方向走。

因为这个速度在游戏中也可能会发生改变,你同样可以建立一个变量叫做“传送带速度”来使用它。

6. 增加尖刺踏板,企鹅站上尖刺踏板血量减1,同时身体变为受伤状态。

最后,我们再来增加一种带尖刺的踏板。前面的步骤还是一样,复制一个造型,修改它的颜色,再和顶部尖刺一样,利用直线和复制粘贴工具画出踏板上的尖刺。

接着,还是修改踏板角色切换造型的随机数范围,然后给碰撞侦测角色的判断再增加尖刺踏板的颜色,让企鹅碰到尖刺踏板后可以往上升。

接着,和企鹅碰到顶部尖刺一样。当企鹅落在尖刺踏板时,我们让它播放一个音效,注意这个音效和落到其他踏板的音效不同,所以在播放声音的地方需要增加一个判断。如果碰到的是尖刺踏板,就播放受伤的音效;否则播放原有音效。此外,别忘了血量也要减1,并且每个尖刺踏板只会减少一次。

在碰到顶部尖刺时,我们做了一个颜色闪烁的特效。在这里企鹅可能会一直站在尖刺踏板上,我们可以将特效修改一下,企鹅站在尖刺踏板的时间内,就会一直不停的闪烁。如何实现?你可能会想到让企鹅判断它是否碰到尖刺踏板上,如果碰到了就闪烁。

用这种方法实现时会有一个问题,当企鹅并没有站在尖刺踏板上,只是身体碰到它,也会不停的闪烁。

所以是否碰到尖刺的判断还是需要交由碰撞侦测角色来完成。如果碰撞侦测角色碰到尖刺踏板,就通知企鹅不停闪烁。如何通知呢?在这里不能使用消息通知,例如像下面这样做。

你可以点击绿旗测试一下。现在企鹅站在尖刺踏板上时,因为碰撞侦测角色会不停地给企鹅发送消息,展示出来的效果就是企鹅的身体会一直变红,不会闪烁。应该怎么处理?

既然不能发送消息,那就只能使用变量的状态值来判断,例如建立一个变量叫做“受伤状态”。当企鹅站在尖刺踏板上时,把变量值设置为“受伤”;离开尖刺踏板后把变量值设置为“未受伤”。当然你同样可以利用数字或其他文字来表示这两种状态。

企鹅只需要不停的判断该变量的状态,如果受伤状态=受伤,那么就闪烁。

7. 企鹅碰到游戏区域底部或血量为0时,游戏结束。

最后,就是修改我们游戏的结束条件。之前我们是碰到游戏区域的顶部和底部时游戏就结束。现在条件变为碰到游戏区域底部或血量为0时,游戏结束。

很简单了,将原来游戏结束的判断条件修改一下就可以了。

这样一来,企鹅下楼梯的游戏就做完了。

我相信你就算是跟着上面的教程一步一步做,在整个过程中还是会碰到很多未知的问题。这里面主要会涉及多个嵌套条件判断和指令串并行执行造成的问题。这时候就需要你在完成每个小步骤后都要进行测试,发现问题就去分析一下自己所写的代码,找到问题的原因,然后再去想出解决方案。

如果你能很轻松的实现上面的操作,那还可以发挥自己的想象力,继续往里面增加其他游戏元素,让游戏变的更加有趣。

想看更多学习案例,欢迎点击查看《Scratch 3学习手册》open in new window

想要获取所有案例源码和素材,以及获得我对你在学习中所遇问题的一对一解答,欢迎加入石头解忧杂货店