Scratch打砖块游戏课程-第三讲:物理中的速度

网友投稿 2018-04-01 09:14

https://cdn.china-scratch.com/timg/180403/091440LE-0.jpg

速度是矢量,有大小有方向,它描述物体运动的快慢,和反映物体运动的方向;速率是标量,有大小没有方向。

所以当我们把速度放在直角坐标系时,我们就可以通过X坐标和Y坐标去控制速度的大小和方向。

直接讲解这些物理知识,可能感觉会比较抽象。幸好我们可以通过完成小球发射功能去深刻的理解速度的概念。

https://cdn.china-scratch.com/timg/180403/091441H04-1.gif

添加速度

首先,我们建立“设置小球发射速度”和“移动小球”的自定义积木,代替原来的“移动5步”积木。

为什么不再使用“移动5步”积木呢?因为这个积木使用起来不够灵活,而且我们重新完成一个类似的功能难度也不太大。

现在我们先添加两个变量,分别命名为X和Y,通过这两个变量我们去控制小球的速度。

https://cdn.china-scratch.com/timg/180403/09144120Z-2.jpg

把两个变量添加后,我们来谈谈为什么X坐标和Y坐标同时变化就可以让小球移动。

在Scratch里,最有效的移动方式有3个积木,分别是“移动10步”,“将x坐标增加10”和“将y坐标增加10”。单独使用它们时,都无法实现一个角度控制的问题,但是同时使用“将x坐标增加10”和“将y坐标增加10”就可以达到预期的效果,例如:两个积木增加同等的数,那么他们就会从45度角发射出去。

https://cdn.china-scratch.com/timg/180403/0914412929-3.jpg

所以我们开始完成“设置小球发射速度”和“移动小球”两个自定义积木。

https://cdn.china-scratch.com/timg/180403/0914413491-4.jpg

在“设置小球发射速度”积木中的“如果那么”积木的作用是什么呢?这个功能是我们希望在发射角度随机的同时,X不等于-1、-2、0、1、2。因为这样会导致出现一个发射角度接近90度的情况,90度的发射会导致小球无法实现除了垂直以外的反弹。

https://cdn.china-scratch.com/timg/180403/091441H04-1.gif

碰到边缘反弹

去掉“移动5步”的积木后,我们紧接着就要去掉“碰到边缘就反弹”积木了。为什么不能通过“碰到边缘就反弹”积木实现碰到边缘反弹的功能呢?原因是我们还需要实现碰到砖块和碰到挡板反弹两个功能,而且我们碰到底部是不能反弹。

那么反弹是如何实现的呢?我们先看看反弹右边边缘时,小球的路径是怎么样的。

https://cdn.china-scratch.com/timg/180403/091441LG-6.jpg

可以通过上面的坐标图看出,只需要把X变量乘-1,就可以实现反弹,因为Y坐标是无论反弹与否,小球是依旧向上移动的,所以Y变量是不需要改变。

那么举一反三,我们添加一个“检测小球是否出界”的积木,完成碰到右边,上方和左边的反弹功能吧。

https://cdn.china-scratch.com/timg/180403/0914424642-7.jpg

那么碰到挡板反弹时又是哪个坐标发生变化呢?

https://cdn.china-scratch.com/timg/180403/0914425459-8.jpghttps://cdn.china-scratch.com/timg/180403/091441H04-1.gif

碰到砖块

当“小球”碰到“砖块”,我们需要实现两个功能,反弹和砖块消失。

其实碰到砖块的反弹和碰到挡板的反弹,原理是一样的,但是我们需要关注的一个细节就是,碰到砖块时,我们是需要考虑碰到砖块的是哪个位置,上下和左右反弹的轨迹自然是不可能一样的。

https://cdn.china-scratch.com/timg/180403/09144252W-10.jpg

这里我们通过小球和砖块的Y坐标进行判断,究竟是碰到上下,还是左右。如何判断呢?

因为目前的坐标是根据中心点确认的,所以我们通过两者的Y坐标相减,得出的结果与砖块的高度进行比较,如果大于砖块高度的一半,那么小球碰到砖块的上方,反之则是碰到右上方或左上方。

那么如何判断下方、左下方和右下方呢?我们只需要把绝对值加上,就可以完美的解决这个问题。如何加呢?我们可以仔细研究下方的代码。

https://cdn.china-scratch.com/timg/180403/0914424552-11.jpg

然后小球该怎么进行反弹呢?

https://cdn.china-scratch.com/timg/180403/0914423O2-12.jpg

好了,走到这步,整个游戏看起来就基本运行起来了,可是里面还有很多的bug等着我们去解决呢!

end

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com