資訊內(nèi)容
Scratch少兒編程第74講:白云朵朵
今天開講前要大家先看實(shí)例,先不看講解,看看大家能看出問(wèn)題的關(guān)鍵點(diǎn)不能。
看上去沒(méi)啥神奇的吧,重點(diǎn)不是熊,熊是灰熊,Scratch3.0自帶的角色造型,背景是CC哥網(wǎng)上找的圖片自己P成透明背景的。剩下唯一的就是云朵了。這個(gè)云朵有什么特別呢?不就是一些造型來(lái)回切換嗎?
這還真不是,這些云朵都是程序自己畫的,CC哥之所以突發(fā)靈感想做這個(gè)是因?yàn)?.....
編程思維解讀
做Scratch是為了訓(xùn)練思維,不是為了什么考試,所以想到什么靈感都可以試著自己做做看,覺(jué)得實(shí)現(xiàn)的方式不滿意,就好好想想有什么更好的方法,想不到可以慢慢想,說(shuō)不定哪天靈感一來(lái)就想到了。
做Scratch如果涉及到動(dòng)畫,大多都是用造型切換來(lái)做的,動(dòng)畫要漂亮就要準(zhǔn)備無(wú)數(shù)個(gè)造型,然后不斷來(lái)切換。CC哥就不喜歡這種方法,因?yàn)榍袚Q造型這種方法沒(méi)意思,不創(chuàng)意,沒(méi)有成就感。就像做火柴人,雖然一開始也是用造型切換來(lái)做動(dòng)作設(shè)計(jì),但是CC哥一直想著怎么能用程序來(lái)直接編寫動(dòng)作,當(dāng)然現(xiàn)在還沒(méi)想好。
上一講,CC哥做了一個(gè)畫多邊形的課程,然后就忍不住開始想,如果畫不規(guī)則圖形該怎么畫呢?比如畫云朵呢?云朵變化很多,用造型切換多沒(méi)意思,用程序來(lái)隨機(jī)畫多好,為此CC哥想了很多,也著手設(shè)計(jì)了一下,但是都不得法。畫出來(lái)的東西也很奇怪。比如,一開始,CC哥準(zhǔn)備讓一個(gè)點(diǎn)做隨機(jī)移動(dòng),然后把軌跡記錄下來(lái),連在一起,但是問(wèn)題來(lái)了,怎么保證軌跡的圓滑呢?另外怎么能畫出封閉的軌跡呢?這都是問(wèn)題。CC哥又嘗試在一定區(qū)間內(nèi)進(jìn)行有條件的隨機(jī)點(diǎn)連線的方法,也不理想。CC哥在這個(gè)坑里就糾結(jié)了兩天。靈機(jī)一動(dòng),突然想起來(lái)了小朋友們學(xué)畫畫里的花云朵的辦法,頓時(shí)茅塞頓開,就做出了上面的程序。
小朋友怎么畫云朵呢?怎么畫大家自己百度吧,很多種不同方法,但是最簡(jiǎn)單也是最容易讓小朋友學(xué)會(huì)的就是畫首尾相接的大小不同的幾個(gè)半圓,然后最后一個(gè)半圓把首和尾連接在一起,就是一朵云彩了。
所以編程就是要找規(guī)律,只要把規(guī)律找出來(lái)了,那么行動(dòng)就有方向了,編程經(jīng)常會(huì)提到要去學(xué)習(xí)算法,其實(shí)算法就是規(guī)律。CC哥覺(jué)得最有意思的事情其實(shí)不是去學(xué)習(xí)已有的編程算法(因?yàn)槿绻阋龃a農(nóng),早晚都要去學(xué)的),而是自己發(fā)明一些小算法。雖然想出來(lái)的算法肯定很簡(jiǎn)單,但是會(huì)很有成就感。
程序代碼介紹
既然有了思路,那么我們看看程序的幾個(gè)關(guān)鍵點(diǎn)。
這是畫云用到的幾個(gè)自定義積木:其中一個(gè)是畫多邊形的,就是上一講里用的畫多邊形的程序。邊數(shù)多了不就是圓了,CC哥用了30條邊的多邊形,怎么看都已經(jīng)很圓了。一個(gè)是畫半圓的,一個(gè)是畫云朵的。
先講部分再講整體,多邊形這個(gè)不用講了,上一講講過(guò)了。
唯一注意的地方,就是X和Y這個(gè)變量保存了半圓終點(diǎn)的坐標(biāo),這個(gè)坐標(biāo)會(huì)作為下一個(gè)半圓的起點(diǎn)。
畫半圓這個(gè)稍微復(fù)雜點(diǎn):
就是要知道圓圈的半徑,半圓的起點(diǎn),以及半圓的朝向角度。
代碼在這里,很好理解,角度就是你這個(gè)半圓的左邊起點(diǎn)跟圓心的連線與垂直方向的夾角。
畫云朵這段代碼分兩部分:
第一部分是先畫5個(gè)首尾相接的半圓。
要點(diǎn):
1:X0和Y0為起點(diǎn),半圓半徑這個(gè)隊(duì)列里是保存了隨機(jī)生成的5個(gè)半圓的半徑。X和Y是每個(gè)半圓終點(diǎn)的坐標(biāo)。
2:角度是每個(gè)圓旋轉(zhuǎn)60度,理論上這是為了形成一個(gè)閉環(huán)。
第二部分就是計(jì)算第6個(gè)半圓的半徑和角度:
1:半徑是5個(gè)半圓的起點(diǎn)和終點(diǎn)之間的連線除以2。
2:已經(jīng)知道了半圓起止點(diǎn)的位置,根據(jù)簡(jiǎn)單的幾何知識(shí)就可以算出半圓的角度。
3:這里需要注意的是如果終點(diǎn)x跑到了起點(diǎn)x0的左邊,那么半圓的方向要翻轉(zhuǎn)一下。
幾個(gè)積木都有了,那么畫云的整體程序就不復(fù)雜了:
1:我們這個(gè)云是移動(dòng)的,不是靜止的,所以要反復(fù)擦了重畫。每次畫都要移動(dòng)一下位置,移動(dòng)的速度定義成“風(fēng)速”這個(gè)變量。
2:頭5個(gè)半圓的半徑是隨機(jī)取好之后存在半圓半徑這個(gè)列表里,這樣,當(dāng)云朵飄動(dòng),需要刷屏重新畫的時(shí)候可以直接從這個(gè)隊(duì)列里面取半徑就好。
這個(gè)程序的關(guān)鍵部分都講完了,大家有沒(méi)有收獲?今天這一講主要講的其實(shí)不是如何編程,而是講得如何想到怎么畫一朵云。希望大家有所收獲。
畫了朵云,CC哥又開始想,云朵應(yīng)該是白色的,那應(yīng)該把這朵云涂成白色的呀?怎么涂呢?簡(jiǎn)單的圓和有規(guī)則的圖形都好涂,那么無(wú)規(guī)則圖形如何涂色呢?這是一個(gè)挑戰(zhàn),為此CC哥已經(jīng)嘗試了幾天了,下一講跟大家交流如何對(duì)無(wú)規(guī)則的圖形進(jìn)行涂色。
《跟我學(xué)Scratch編程》源代碼獲取方式:(點(diǎn)擊查看)1:《跟我學(xué)Scratch編程》前60講程序匯總2:第60講~72講進(jìn)階課程源代碼獲取方式
如果覺(jué)得CC哥做的不錯(cuò),請(qǐng)點(diǎn)擊右下角的"好看",給CC哥一個(gè)鼓勵(lì)!
·END·
跟我學(xué)Scratch編程不用花錢成為Scratch高手
