Intoweb
本文將帶你通過對下雪天氣的特征提取,綜合使用Scratch自帶素材庫,制作夜晚下雪,樹冠積雪,天亮雪化的動畫。這個實例綜合運用了Scratch多項特性,可以幫你加深對Scratch外觀特效的理解。
下雪是常見的氣候,那么我們將其轉化為程序,就可以更好地理解程序與現(xiàn)實的相同與不同,明白構建程序需要的特征與可以舍棄的特征。
若我們要模擬下雪,首先要確定程序的演示目標,雪從天上落下來,要堆在地面上,堆在樹上,天亮后融化……
最終定下動畫要完成的三個特征:落下、堆積、融化。
程序分為夜晚和白天兩個部分,夜晚雪花落下并堆積。白天,切換白天背景,停止落雪程序,開始雪花融化程序。
1. 我們復制背景庫中的Blue Sky作為一個新的角色,選擇Blue Sky作為背景,在繪制背景中,直接將藍天背景拖到原小貓角色里面去,再刪除原小貓角色即可。
2. 為了體現(xiàn)白天與黑夜的區(qū)別,我們這里添加一個太陽(Sun)角色來表明是白天。
3. 添加雪花(Snowflake)角色,即可完成所有角色的選擇。
落雪發(fā)生在夜晚,我們需要對原Blue Sky做修改,把它變成昏暗的夜晚。
對藍天背景進行修改,用選擇工具點擊藍色天空部分,點填充,拖動顏色亮度條,修改出夜色。
然后是綠樹的部分,我們使用選擇工具點擊綠樹時,會發(fā)現(xiàn)它是多個角色組合而成的,我們這里按住“Shift”鍵,開啟多選模式,將所有綠樹部分選中。選擇組合,然后將輪廓修改為無輪廓,顏色修改為更深的綠色。
改完樹木后,發(fā)現(xiàn)綠樹擋住了一部分棕色的道路,選擇道路,將其放最前面。
本體隱藏,克隆體顯示,我們曾經(jīng)研究過克隆體數(shù)量上限問題,300片雪花做不出積雪的效果,所以當克隆體雪花落到地面后,用畫筆的圖章工具在原地留下印記,然后刪除掉克隆體。
為了雪花更逼真,給它加上虛像特效、隨機大小、一直旋轉。
雪花從空中飄落時并不是垂直下落,我們給每個雪花隨機的起點與落點,這樣每個雪花的飄落方向就完全隨機了。起點統(tǒng)一選擇上邊緣,即(-240~240,180)。落點在道路上,x坐標仍然為-240~240,y坐標為-180~-160。下落時間可以設定為隨機4~8秒。
下雪時總有部分雪花落在樹上,我們通過隨機參數(shù)產生一個概率判斷,讓1/4的雪花落在樹梢上,剩下的落在路上。
設置概率的方法,可以使用隨機數(shù)。例如1/4的概率,產生1到4的隨機數(shù),判斷當數(shù)字等于1時執(zhí)行條件。
遇到樹冠的判斷使用取色器選取樹的顏色作為標記。
由于樹在道路上方,根據(jù)透視原理,可以理解為樹離我們更遠,那么樹上的雪花應該更小。
樹的邊緣并不平整,所以落點可以有一定起伏。
為了實現(xiàn)雪花的融化效果,我們需要讓雪花緩慢消失,雪花由于數(shù)量較多,克隆體數(shù)量有上限(300個),所以使用圖章制作,圖章繪制的圖案是無法編寫程序的。因此只能通過其他方法影響雪花圖案,給人雪花在緩慢消失的錯覺。
我們這里使用一張與原背景圖相同的角色(Blue Sky原圖復制的角色)緩慢出現(xiàn)在最上層,覆蓋雪花,來制作雪花融化特效。
用空格鍵作為信號,開始時隱身(虛像效果100),按下空格鍵后通知藍天角色逐漸顯示,具體程序需使用外觀特效中的虛像特效(虛像效果重復減小直到0)。
藍天角色(非背景)代碼如圖:
太陽開始時隱藏,當按下空格鍵后等待一會兒再慢慢從邊緣移到舞臺中間偏上的位置。
為了讓雪花白天停止飄落,所以我們需要設一個變量“下雪”,當“下雪”為“假”時通知雪花停止克隆。
總結:這個下雪動畫充分利用了編程的優(yōu)勢,綜合運用克隆、圖章、隨機數(shù)、概率、顏色判斷等多項Scratch功能和技巧,模擬出比普通動畫更自然的下雪效果,希望你能把這些技巧靈活運用到其他動畫中去。