2017年12月8日 星期五

Scratch小教室(入門) - 第5課 : 重力跳


學習目標 : 讓Scratch小貓擁有在重力場下的跳躍方式
預估時間 : 50min
使用模組 : (1) faya brickNano
                 (2) faya搖桿模組
                 (3) faya觸控開關模組
工具 : 積木組 / 積木底板


=====================相關知識====================
第4課我們將小貓加入了向上跳的功能,但動作看起來有點死板,因此我們在這一課修改一下跳躍的程式,讓小貓跳起和落地的方式,有如在重力場中的跳法,這邊我們簡稱為重力跳。

那麼重力跳有哪些特色呢?

(1) 往上跳躍時,對帶著往上的初速讓身體向上移動
(2) 跳躍的過程中由於重力的關係,速度漸漸變慢
(3) 在最高點的時候速度為0 ,然後開始落下
(4) 落下過程中,漸漸加速
(5) 著地時的速度達到最高

 註: 這一課的目的是要模擬出重力跳的感覺,並未帶入物理公式,寫程式前先特別說明。

======================重力跳=====================
程式:L5_gravity_jump.sb

第四課我們在永久執行的迴圈內加入了普通往上跳的功能,我們把這一區的程式先刪除,接著一步一步建立出重力跳的程式。


首先我們製造一個height的變數,這個變數方便用來調整小貓跳躍的高度,建立後,會多出一個"height"的變數方塊供未來選擇,如下圖中左區。


接下來我們要想想如何讓腳色往上跳後速度愈來愈慢,到最高點的速度是0,如果把整個過程切成多段,當每段時間相同時,意味著每次上升的距離愈來愈短。舉個誇張的例子來說,如果我往上跳到最高點需要5秒,此時:
(1) 0~1秒能夠上升100公分
(2) 1~2秒能夠上升80公分
(3) 2~3秒能夠上升60公分
(4) 3~4秒能夠上升40公分
(5) 4~5秒能夠上升20公分
(6) 在最高點就不再上升了

到達最高點後開始下降,下降會呈加速狀態,移動距離由少變多,和上升剛好將反,也就是說:
(1) 0~1秒能夠下降20公分
(2) 1~2秒能夠下降40公分
(3) 2~3秒能夠下降60公分
(4) 3~4秒能夠下降80公分
(5) 4~5秒能夠下降100公分
(6) 著地後就不再下降了

來看看我們怎麼完成這段程式:


(1) 利用偵測觸控開關[Digital2]的狀態觸發重力跳
(2) 利用第4課建造的藍色地形,設成著地條件
(3) 將height的初始值設成15,然後每次執行Y座標移動後,height值會減1,當height為正值時,小貓向上移動,負值時,小貓向下移動,直到著地為止。因此上升時,height愈來愈小,下降時,height愈來愈大,達到重力跳躍的感覺。


(4) 因此當我們把height設成15時,跳躍的高度可以算出來是(15+14+13+12 ... 3+2+1) 。利用梯形面積公式會得到結果為120個Scratch座標單位,我們稍後再來驗證是否正確。


接著我們把這個程式方塊放回主程式,就能測試效果了


看看結果:


有沒有感覺小貓的跳躍方式自然了許多呢?  影片第10秒的時候,我們開啟了單步執行,可以看出小貓每次往上移動的距離愈來愈小,右上角的height變數從15開始下降,在24秒時降到0,此時達到最大高度,接著開始下降,每次往下移動的距離愈來愈大,height變數從-1開始到第32秒時升到-15,此時剛好抵達地面。

另外我們在程式上方可以看到小貓的Y座標位置,小貓在地面時的座標位置是-61,小貓在最高點的位置座標是59,可以算出跳躍的高度是 59 - (-61) = 120,和我們用梯形公式算出的結果相同。



試試看:
修改變數height的初始值(15),和變數height的增加值(-1),觀察結果會如何?  當height的增加值變成正值,結果會如何?


======================心得======================

我們在這一課利用簡單的數學運算,讓小貓表現出重力跳的感覺,大家有沒有發現小貓的動作愈來愈像超級瑪莉了?  我們在下一課會介紹拋物線跳,讓小貓隨著搖桿移動的方向跳躍的功能。

<< 第4課 : 往上跳
>> 第6課 : 拋物線跳

====================================
fayalab 粉絲團


沒有留言:

張貼留言