游樂園的彈簧床你有沒有看到過,小朋友在彈簧床上跳來跳去,彈簧床會根據(jù)跳起的高度反饋一個向上的力,之后反饋的力就會慢慢變小。今天我們就用Scratch來模仿一下彈簧床吧。
彈簧床的反彈效果和之前我們講過“打磚塊”的反彈效果不同,“打磚塊”小球的速度是勻速的,但是彈簧床就用到了上期我們講到的重力加速度——下落的時候逐漸加速,遇到彈簧床后,下落速度逐漸減小到0,然后反彈加速上升,離開彈簧床后上升速度逐漸減小到0,又重復(fù)開始下降過程,并且彈簧床恢復(fù)水平。
為了表現(xiàn)彈簧床受到壓力向下凹陷的效果,當(dāng)小貓向下跳時,彈簧床需要有一個明顯的形變過程,并且這個變形需要與小貓的下落同步。
因此程序難點包括需要解決彈跳過程中的速度變化,判斷角色何時碰到彈簧床,彈簧床要隨情況變形。
我們就用畫筆來繪制彈簧床。設(shè)置顏色(粉色),筆的粗細(xì)(6),畫筆從左側(cè)(-240,0)落筆畫到右側(cè)(240,0)抬筆,這樣一條直線就來了。
為了實現(xiàn)彈簧床受到小貓下壓后形變的過程,我們在彈簧床的中間增加一個途經(jīng)點,這個點的坐標(biāo)就是小貓的腳下,需要在小貓造型中將角色中心移到小貓腳下。
還需要注意,當(dāng)小貓的縱坐標(biāo)小于0的時候才產(chǎn)生形變,縱坐標(biāo)大于0不形變,還是畫直線(圖1)。

當(dāng)小貓y坐標(biāo)小于0時,畫筆從左側(cè)(-240,0)落筆畫到小貓角色的(x,y)坐標(biāo),再畫到右側(cè)(240,0)抬筆(圖2)。

彈簧床代碼(圖3):

小貓的彈跳過程與自由落體中的小球類似,只不過加速度是逐漸變化的。
設(shè)置小貓的大小,起始位置,旋轉(zhuǎn)方式為不可旋轉(zhuǎn)。設(shè)置初始方向(面向0°方向)。新增變量“速度”用于控制小貓下降和反彈的速度。由于重力加速度的原因,當(dāng)向下掉落的時候速度是越來越快的(速度負(fù)數(shù)表示向下,速度正數(shù)表示向上),當(dāng)小貓碰到彈簧床的時候就產(chǎn)生一個反彈力,用直線的顏色判斷是否碰到彈簧床。速度的快慢是由速度絕對值來決定的(圖4)。

當(dāng)我們將程序編寫完運行之后,就可以看到彈簧床的效果,之前的三點需求都已經(jīng)解決了。
我們還可以在此基礎(chǔ)上添加功能,比如通過左右鍵和空格,控制小貓在彈簧床上表演一些雜技……