游樂園的彈簧床你有沒有看到過,小朋友在彈簧床上跳來跳去,彈簧床會(huì)根據(jù)跳起的高度反饋一個(gè)向上的力,之后反饋的力就會(huì)慢慢變小。今天我們就用Scratch來模仿一下彈簧床吧。
彈簧床的反彈效果和之前我們講過“打磚塊”的反彈效果不同,“打磚塊”小球的速度是勻速的,但是彈簧床就用到了上期我們講到的重力加速度——下落的時(shí)候逐漸加速,遇到彈簧床后,下落速度逐漸減小到0,然后反彈加速上升,離開彈簧床后上升速度逐漸減小到0,又重復(fù)開始下降過程,并且彈簧床恢復(fù)水平。
為了表現(xiàn)彈簧床受到壓力向下凹陷的效果,當(dāng)小貓向下跳時(shí),彈簧床需要有一個(gè)明顯的形變過程,并且這個(gè)變形需要與小貓的下落同步。
因此程序難點(diǎn)包括需要解決彈跳過程中的速度變化,判斷角色何時(shí)碰到彈簧床,彈簧床要隨情況變形。
我們就用畫筆來繪制彈簧床。設(shè)置顏色(粉色),筆的粗細(xì)(6),畫筆從左側(cè)(-240,0)落筆畫到右側(cè)(240,0)抬筆,這樣一條直線就來了。
為了實(shí)現(xiàn)彈簧床受到小貓下壓后形變的過程,我們?cè)趶椈纱驳闹虚g增加一個(gè)途經(jīng)點(diǎn),這個(gè)點(diǎn)的坐標(biāo)就是小貓的腳下,需要在小貓?jiān)煨椭袑⒔巧行囊频叫∝埬_下。
還需要注意,當(dāng)小貓的縱坐標(biāo)小于0的時(shí)候才產(chǎn)生形變,縱坐標(biāo)大于0不形變,還是畫直線(圖1)。
當(dāng)小貓y坐標(biāo)小于0時(shí),畫筆從左側(cè)(-240,0)落筆畫到小貓角色的(x,y)坐標(biāo),再畫到右側(cè)(240,0)抬筆(圖2)。
彈簧床代碼(圖3):
小貓的彈跳過程與自由落體中的小球類似,只不過加速度是逐漸變化的。
設(shè)置小貓的大小,起始位置,旋轉(zhuǎn)方式為不可旋轉(zhuǎn)。設(shè)置初始方向(面向0°方向)。新增變量“速度”用于控制小貓下降和反彈的速度。由于重力加速度的原因,當(dāng)向下掉落的時(shí)候速度是越來越快的(速度負(fù)數(shù)表示向下,速度正數(shù)表示向上),當(dāng)小貓碰到彈簧床的時(shí)候就產(chǎn)生一個(gè)反彈力,用直線的顏色判斷是否碰到彈簧床。速度的快慢是由速度絕對(duì)值來決定的(圖4)。
當(dāng)我們將程序編寫完運(yùn)行之后,就可以看到彈簧床的效果,之前的三點(diǎn)需求都已經(jīng)解決了。
我們還可以在此基礎(chǔ)上添加功能,比如通過左右鍵和空格,控制小貓?jiān)趶椈纱采媳硌菀恍╇s技……