Scratch少儿编程第75讲-海洋世界-进阶版

网友投稿 2019-12-31 10:52

进阶教程不光是把程序做得复杂,更多时候是把程序的细节处理好,今天CC哥就把海洋世界之前做过的一个最初级的程序,配上一些细节的完善,让大家再看看这个游戏跟初级课程做的游戏会有什么区别。

先看看游戏视频:

视频没看清楚的地方,下面一步步介绍。

气泡的优化思路

1:首先CC哥第一眼就觉得之前的游戏里最大的问题就是气泡不会动。

https://cdn.china-scratch.com/timg/200102/1052442S3-0.jpg

因为这只是个背景图片,气泡当然不会动了,那我们想把它变成会动的气泡,那不就生动了?

如何变成会动的气泡呢?CC哥开始思考相应的物理知识:

1:气泡在浮起的时候,随着压强的降低,是不断变大的。

2:因为变大,受到的浮力也不断增大,所以气泡是不断加速上浮的,而且加速度越来越快的。

3:因为受到各种外部环境影响,气泡是不可能直线上浮的,是在上浮过程中左右晃动的。

有了这些物理知识,那么CC哥要做的气泡程序就必须符合这个条件才行。

看到这里大家明白没有?刚才你看到的游戏视频里的气泡可不是什么动图和造型切换,而是CC哥用编程做出来的。

https://cdn.china-scratch.com/timg/200102/105245C40-1.gif

通过这个动图大家观察出来气泡怎么产生的了吗?


气泡的程序设计

首先这个CC哥是用克隆体来做的:

1:第一步要设计好气泡的样子和冒出的位置

https://cdn.china-scratch.com/timg/200102/10525012c-2.jpg

https://cdn.china-scratch.com/timg/200102/1052501V8-3.jpg

气泡就是一个绿色的小点。CC哥构想有海底冒出三个气泡的位置,直接copy了三个气泡的角色,这样可以简化编程。这三个角色的代码都是一模一样的。

2:不断克隆自己

https://cdn.china-scratch.com/timg/200102/105250L42-4.jpg

克隆的时间间隔,CC哥用了讲过的随机数技巧,平常的随机数只能取整数,但是CC哥想要的随机的时间间隔很短,大概在0.02秒和0.06秒之间,所以我们只要把取得随机数除以50,就可以得到小数的随机数。

3:气泡上升过程中的变化:

https://cdn.china-scratch.com/timg/200102/1052512455-5.jpg

这段代码主要注重两部分:

a: 上升加速

上升加速有两种方法,一种是用加法,一种是用乘法。区别就是固定加速度还是变加速度。比如我们平常模拟重力效果时就用加法,我们会把上升速度每次循环时固定增加1或-1,这就是固定加速度。而乘法是我们每次把加速度的值每次循环乘以一个系数,那么这种变化就会产生累积,会越来越大。比如:1.1 * 1.1 * 1.1 * 1.1 * 1.1 * 1.1 * 1.1 = 1.95。这就是炒股里说的复利,每年只赚10%,七年下来就赚翻翻了。https://cdn.china-scratch.com/Public/Home/images/grey.gif 

另外考虑多一个细节,就是每次气泡冒出来的大小是不固定的,有的出来小些,有的大些。

https://cdn.china-scratch.com/timg/200102/1052513U7-7.jpg

为什么这么考虑?是想让气泡在上升的过程中有交错的效果,比如大的气泡升的快,就会超过小的气泡,视觉效果就更真实。所以初始的上升速度是跟气泡的大小有关系的。

b: 水平晃动

https://cdn.china-scratch.com/timg/200102/1052515311-8.jpg

https://cdn.china-scratch.com/timg/200102/1052522R6-9.jpg

https://cdn.china-scratch.com/timg/200102/1052521M1-10.jpg

跟晃动部分相关的代码:

1:晃动只要处理X轴的运动效果就可以。

2:用正弦函数就可以得到一个-1~1之间的变换值。再配上Y轴的运动,就会产生螺旋上升的效果。

3:设置晃动变量增加的数值,是为了控制气泡群的宽度,晃动增加的越快,气泡群的直径就越窄。

4:在每次循环的运动过程中用了随机数来变换振幅,这样就可以造成上升过程中的随机运动效果,而不是一个标准的螺旋上升曲线。

有没有觉得CC哥思考得还是很周全的?程序不复杂,但是效果很好。https://cdn.china-scratch.com/Public/Home/images/grey.gif这一直是CC哥追求的,越简单越完美。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

顺便优化一下鲨鱼

这一讲主要是讲气泡的,但是CC哥在做完了气泡之后,就停不下来,还想把鲨鱼优化一下。

https://cdn.china-scratch.com/timg/200102/1052521448-15.gif

这是老的被鲨鱼吃掉效果,是不是简陋的想哭呀。https://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/200102/105253CO-17.jpg

CC哥看到造型里还有一个张嘴的造型,这不正好是吃鱼的动作嘛,赶紧利用以前的学习技巧,把这个改善一下。

https://cdn.china-scratch.com/timg/200102/1052532517-18.gif

这里面也有细节要处理:

1:鲨鱼有两种,一种是固定巡航的鲨鱼,沿着固定路径在走,那么如果碰到小鱼的时候是背面碰到的,那么鲨鱼要转身吃掉小鱼。

2:在吞吃小鱼的时候,是嘴部吞的,嘴部并不是鲨鱼的中心位置,所以程序处理要退20步。

3:要配音https://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/200102/10525L333-20.jpg

过程控制

以前处理程序流畅,结束的时候就是一个停止全部脚本。

https://cdn.china-scratch.com/timg/200102/10525W306-21.jpg

其实配合好消息命令,还有这些停止命令,就可以很有效的控制游戏的进程。CC哥就用这些命令进行游戏的进程控制,给小鱼附加上生命值,变成了一个完整的游戏。

这次的进阶课程,并不是要强调多高深的编程技巧,而是强调编程设计中如何对细节进行思考,一些小的技巧用在细节的处理上面,就会为程序增色不少。所以学习过程中,最重要的是活学活用,而不是天天追求难点。


·END·

跟我学Scratch编程

不用花钱成为Scratch高手

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