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