### 介绍
您将学习如何创建一个平台游戏,在该游戏中玩家必须躲避移动的球才能到达关卡的尽头。
单击绿色小旗标志开始游戏,使用方向键控制角色移动,使用** 空格** 键跳跃,遇到粉红的墙可以向上爬。

### 资源获取

想要获取项目文件,可扫码关注“小石头编程”公众号,回复“**躲开小球**”获取下载地址。
### 能学到的知识
在这个项目中,我们可以学到以下知识:
- 如何使用键盘控制角色
- 使用“**如何-那么-否则**”积木
- 了解重力以及如何在游戏中应用重力(物理引擎)
- 如何克隆角色
### 项目制作
#### 1、角色移动
首先创建一个可以左右移动并可以爬梯子的角色,我们可以选择一个精灵,这个精灵最好有走路动画,这样可以让它看起来更自然,如下所示:

另外,我们有一个平台图案的背景,如下图所示:

给我们的角色添加代码,以便玩家可以使用方向键来移动角色。 当玩家按下向右箭头时,角色应向右侧移动几步,然后换成下一个造型:

如果您的角色不适合,需要调整其大小:

通过单击绿旗并按住向右箭头键来测试您的角色。 您的角色是否向右移动? 您的角色看起来像在走路吗?
下面我们来添加向左箭头的控制代码,这样当向左按钮被按下时,它就可以向左走了。

测试新代码,看是否能正常工作。您会发现,向左时,角色可能会颠倒过来。

如果是这样,您可以通过单击角色的 方向,然后单击左右箭头来来解决此问题。

您也可以通过把下面这个积木添加到角色代码的开头来解决此问题

想要实现爬粉红色的梯子的功能,只要在 上箭头被按下 并且 角色精灵刚好碰到了正确的颜色时,在舞台上把角色精灵向上移动几步就可以了。代码如下:

测试您的代码。 您可以让角色爬上粉红色的梯子并到达关卡的尽头吗?

#### 2、关卡完成
向你的角色精灵添加更多的代码积木,如果 它到达了绿色的门,让它说点什么吧

#### 3、重力和跳跃
现在,您将会把角色的移动做得更加逼真:为游戏增加重力,并使角色具有跳跃的能力。
在游戏中,移动您的角色,使其离开平台。 您看到它可以走到了空白的地方吗?

要解决这个问题,需要在游戏中添加重力 创建一个新的名为 **重力** 的变量,我们可以根据需要在舞台中隐藏此变量。

添加下面这些设置 **重力** 为负数的代码块,并使用 **重力** 的值反复更改角色的 y 坐标:

单击绿旗,然后将您的角色拖动到舞台的顶部。 发生了什么? 这个重力效果是不是你想要的呢?

重力不应该使角色精灵穿过平台或梯子! 添加一个 **如果** 积木块到你的代码中,只有当角色处于空中时才让重力起作用。 重力代码应如下所示:

再次测试游戏,看看现在重力是否正常工作。 当角色精灵接触到平台或梯子时,它会不会停止下落? 您可以使角色走出平台边缘并掉到下面的平台吗?

现在添加代码以使您的角色在玩家按下空格键时跳起来。 一种非常简单的方法是将角色向上移动几次:

由于重力不断将您的角色向下推4个像素,因此您需要在 将 y 坐标增加 (4) 的积木块中选择一个大于 4 的数字。 更改数字,直到您对角色跳跃的高度满意为止。
测试您的代码,我们注意到跳跃动作不是很平滑。 为了使跳跃看起来更平滑,需要把角色精灵上升的幅度调整的越来越小,直到不再升高为止。
因此需要再创建一个名为 **跳跃高度** 的新变量。 同样的,您可以根据需要隐藏此变量。
删除已经添加到角色精灵中的跳跃部分的代码,然后添加以下代码:

这段代码将您的角色先上移 8 个像素,然后再上移 7.5 个像素,然后再上移 7 个像素,依此类推,直到它不再升高为止, 这样就使得跳跃看起来更加平滑。
记得要把 设置 **跳跃高度** 积木块放在变量,该变量在** 重复执行** 的积木块前面, 然后测试您的游戏。
重复这两个步骤,直到您对角色跳跃的高度感到满意为止。
#### 4、挑战:改进跳跃体验
即使角色已经在半空中,只要玩家继续按下 **空格键**,角色就会连续向上跳。 如果一直按住空格键,您就会看到这种现象。
您是否可以更改角色精灵的跳跃代码,使得角色**如果**接触到蓝色平台的时候才能进行跳跃。
#### 5、躲避小球
您的角色现在已经可以移动和跳跃了,是时候添加一些躲避球了。
创建一个新的小球精灵,您可以选择任何您喜欢的球。

调整球形精灵的大小,以便角色可以跳过它,尝试使角色跳过球以测试球的大小是否合适。

将下面的代码添加到小球精灵中:


此代码每三秒钟创建一个新的小球精灵克隆,每个新克隆都沿着顶部平台移动,然后掉落。
单击绿旗,我们测试下程序

向小球精灵添加更多代码,以便其克隆体在所有三个平台上移动。


现在,如果您的角色被球击中,请添加一些代码块以广播 (发送) 消息!
将下面的代码添加到小球精灵角色中:

最后,在您的角色精灵添加代码块,以使其在收到 **hit** 消息时返回起点位置:

测试您的代码, 检查角色在碰到小球后是否回到起点位置。
#### 6、挑战:随机小球
目前生成的躲避球看起来都一样,并且固定每隔三秒钟就会出现一次。 您能否在游戏中添加代码,以便使小球:
- 看起来不那么一样?
- 在一个 **随机** 多长时间后出现?
- 小球的大小随机?

#### 7、激光
为了让我们的游戏更难完成,我们将添加激光!
在游戏中添加新的精灵,并将其命名为 **激光**。 它应该有两种造型:一种叫做 “开”,另一种叫做 “关”。


将新的激光精灵放置在两个平台之间。

向激光精灵添加代码,以使其在其两个造型之间切换。

我们在两次造型更换之间等待 一个**随机**的时间间隔,让激光更有意思。
最后,向激光精灵添加代码,以便激光精灵碰到角色精灵时广播“**hit**” 消息。

测试我们的游戏,看看是否可以将角色移过激光。 如果激光躲避起来太容易或太困难,修改激光精灵代码中的 **等待** 时间。
#### 8、挑战:更多障碍
如果您认为这个游戏仍然太简单,则可以添加更多障碍,障碍可以是您喜欢的任何东西! 下面是一些建议:
- 一只危险的蝴蝶
- 出现和消失的平台
- 掉落的网球

您甚至可以设计另一个背景来创建下一关。 添加代码,以便当您的角色到达绿色门时,游戏会切换到新的背景。
#### 9、挑战:改进的重力
我们的游戏中还有另外一个小 bug: 如果游戏精灵的任何部位接触到了蓝色的平台,那么角色精灵将不会下落 因此,即使是精灵头部接触平台,精灵也不会掉落! 您可以测试一下:让角色精灵爬上梯子,但不是完全爬上梯子,然后将角色精灵移动到平台下方:

可以让孩子好好思考一下,如何修复这个bug。
#### 10、挑战:更多生命
现在,角色碰到小球时会返回其初始位置。 您还可以给角色精灵设置三条**命**吗?,如果角色精灵碰到了小球就会失去一条命?
- 游戏开始时角色有三条命
- 每当角色被击中时,它就会失去一条生命 并且 回到起点
- 如果没有生命,游戏结束