Scratch少儿编程第74讲:白云朵朵

网友投稿 2020-01-01 11:00

今天开讲前要大家先看实例,先不看讲解,看看大家能看出问题的关键点不能。

https://cdn.china-scratch.com/timg/200103/1100162627-0.gif

看上去没啥神奇的吧,重点不是熊,熊是灰熊,Scratch3.0自带的角色造型,背景是CC哥网上找的图片自己P成透明背景的。剩下唯一的就是云朵了。这个云朵有什么特别呢?不就是一些造型来回切换吗?

这还真不是,这些云朵都是程序自己画的,CC哥之所以突发灵感想做这个是因为......

编程思维解读

做Scratch是为了训练思维,不是为了什么考试,所以想到什么灵感都可以试着自己做做看,觉得实现的方式不满意,就好好想想有什么更好的方法,想不到可以慢慢想,说不定哪天灵感一来就想到了。

做Scratch如果涉及到动画,大多都是用造型切换来做的,动画要漂亮就要准备无数个造型,然后不断来切换。CC哥就不喜欢这种方法,因为切换造型这种方法没意思,不创意,没有成就感。就像做火柴人,虽然一开始也是用造型切换来做动作设计,但是CC哥一直想着怎么能用程序来直接编写动作,当然现在还没想好。

上一讲,CC哥做了一个画多边形的课程,然后就忍不住开始想,如果画不规则图形该怎么画呢?比如画云朵呢?云朵变化很多,用造型切换多没意思,用程序来随机画多好,为此CC哥想了很多,也着手设计了一下,但是都不得法。画出来的东西也很奇怪。比如,一开始,CC哥准备让一个点做随机移动,然后把轨迹记录下来,连在一起,但是问题来了,怎么保证轨迹的圆滑呢?另外怎么能画出封闭的轨迹呢?这都是问题。CC哥又尝试在一定区间内进行有条件的随机点连线的方法,也不理想。CC哥在这个坑里就纠结了两天。灵机一动,突然想起来了小朋友们学画画里的花云朵的办法,顿时茅塞顿开,就做出了上面的程序。

小朋友怎么画云朵呢?怎么画大家自己百度吧,很多种不同方法,但是最简单也是最容易让小朋友学会的就是画首尾相接的大小不同的几个半圆,然后最后一个半圆把首和尾连接在一起,就是一朵云彩了。

https://cdn.china-scratch.com/timg/200103/11001U348-1.jpg

所以编程就是要找规律,只要把规律找出来了,那么行动就有方向了,编程经常会提到要去学习算法,其实算法就是规律。CC哥觉得最有意思的事情其实不是去学习已有的编程算法(因为如果你要做码农,早晚都要去学的),而是自己发明一些小算法。虽然想出来的算法肯定很简单,但是会很有成就感。

程序代码介绍

既然有了思路,那么我们看看程序的几个关键点。

https://cdn.china-scratch.com/timg/200103/11001T547-2.jpg

这是画云用到的几个自定义积木:其中一个是画多边形的,就是上一讲里用的画多边形的程序。边数多了不就是圆了,CC哥用了30条边的多边形,怎么看都已经很圆了。一个是画半圆的,一个是画云朵的。

先讲部分再讲整体,多边形这个不用讲了,上一讲讲过了。

https://cdn.china-scratch.com/timg/200103/11001U158-3.jpg

唯一注意的地方,就是X和Y这个变量保存了半圆终点的坐标,这个坐标会作为下一个半圆的起点。

画半圆这个稍微复杂点:

https://cdn.china-scratch.com/timg/200103/11001ab0-4.jpg

就是要知道圆圈的半径,半圆的起点,以及半圆的朝向角度。

https://cdn.china-scratch.com/timg/200103/11001932X-5.jpg

代码在这里,很好理解,角度就是你这个半圆的左边起点跟圆心的连线与垂直方向的夹角。

画云朵这段代码分两部分:

第一部分是先画5个首尾相接的半圆。

https://cdn.china-scratch.com/timg/200103/1100204928-6.jpg

要点:

1:X0和Y0为起点,半圆半径这个队列里是保存了随机生成的5个半圆的半径。X和Y是每个半圆终点的坐标。

2:角度是每个圆旋转60度,理论上这是为了形成一个闭环。

第二部分就是计算第6个半圆的半径和角度:

https://cdn.china-scratch.com/timg/200103/1100202R7-7.jpg

1:半径是5个半圆的起点和终点之间的连线除以2。

2:已经知道了半圆起止点的位置,根据简单的几何知识就可以算出半圆的角度。

3:这里需要注意的是如果终点x跑到了起点x0的左边,那么半圆的方向要翻转一下。

几个积木都有了,那么画云的整体程序就不复杂了:

https://cdn.china-scratch.com/timg/200103/110021CH-8.jpg

1:我们这个云是移动的,不是静止的,所以要反复擦了重画。每次画都要移动一下位置,移动的速度定义成“风速”这个变量。

2:头5个半圆的半径是随机取好之后存在半圆半径这个列表里,这样,当云朵飘动,需要刷屏重新画的时候可以直接从这个队列里面取半径就好。

这个程序的关键部分都讲完了,大家有没有收获?今天这一讲主要讲的其实不是如何编程,而是讲得如何想到怎么画一朵云。希望大家有所收获。

画了朵云,CC哥又开始想,云朵应该是白色的,那应该把这朵云涂成白色的呀?怎么涂呢?简单的圆和有规则的图形都好涂,那么无规则图形如何涂色呢?这是一个挑战,为此CC哥已经尝试了几天了,下一讲跟大家交流如何对无规则的图形进行涂色。

《跟我学Scratch编程》源代码获取方式:(点击查看)1:《跟我学Scratch编程》前60讲程序汇总
2:第60讲~72讲进阶课程源代码获取方式

如果觉得CC哥做的不错,请点击右下角的"好看",给CC哥一个鼓励!

·END·

跟我学Scratch编程

不用花钱成为Scratch高手

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