2017年12月29日 星期五

Scratch小教室(入門) - 第7課 : 蹲坐


學習目標 : 讓Scratch小貓擁有蹲坐的動作
預估時間 : 75min
使用模組 : (1) faya brickNano
                  (2) faya搖桿模組
                  (3) faya觸控開關模組
工具 : 積木組 / 積木底板


=====================相關知識====================
我們已經完成了小貓自然跳躍的程式,這堂課要跟大家示範如何讓小貓自然的蹲(坐)在地上。乍看之下,蹲下去只是一個簡單的動作,似乎很容易就能夠達成,但是由於我們的程式裡面已經擁有走和跳的動作了,要在不影響原來動作的情況下,增加程式產生新的動作,這個過程比單獨產生一個動作更有挑戰性,這堂課寫程式的時候會一一遇到此類問題,我們會示範如何解決。

已知要解決的問題:
(1) Scratch裡面沒有小貓蹲坐的圖案,因此我們會先建立這個圖案,接著才開始進行程式的新增與修改。
(2) 我們必須讓程式判斷最後小貓是面向左邊或右邊,如此才能在蹲下去時,朝同一個面向。
(3) 蹲下去時,小貓的高度變矮了,因此我們必須適時移動小貓,讓小貓看起來是蹲在地上的感覺
(4) 程式需判斷當搖桿從下方回到中心點時,小貓要站起來。

======================蹲坐圖像=====================
由於Scratch沒有提供小貓蹲下去的圖像,因此我們必須手動製作一個,製作流程是參考以下Scratch網站,我們在這邊截圖加入中文註解。

https://scratch.mit.edu/projects/126781412/

(1) 首先複製一個連朝右的造型 (cat1-a)


(2) 接著把雙腳框起來


 (3) 然後把框起來的部分移到右方


(4) 接著把左邊的腳刪除,留下右邊那隻腳


(5) 複製剩下的這隻腳(蓋章工具),然後逆時針旋轉一次,角度如下所示


(6) 把旋轉好的腳接回身體


另一隻腳也是如法炮製


接回身體小貓就有坐著的感覺了


完成之後,打它命名為cat1-c,並且製作朝著左方坐著的小貓,命名為cat1-c1,整理一下順序後如下所示:


========================右蹲=======================
程式:L7_right_sit.sb
進行程式撰寫之前,先把小貓挪到地面上
 

紀錄一下此時Y座標的位置 (本範例以 -70為例)


接下來我們把搖桿往下移時,電壓接近0的情況,用來當成小貓蹲下的條件,也就上當判斷Analog1值很小時,小貓變成蹲下來造型,我們可以把程式包在另一個重覆執行的迴路,看起來比較清楚好解釋,等到整段程式完成後,再挪回主程式。


完成以下程式後,搖桿往下移時,小貓就會蹲坐下去。但是我們發現到,由於蹲下時小貓變矮了,因此看起來好像坐到空中!!


 
因此我們需要再挪一下Y座標(-90),讓牠看起來像是坐在地上。


再次試試看執行結果,看起來好多了!


可是此時出現另一個問題,當我們搖桿往右移動的時候,小貓好像掉到地平線下了!

 

因此我們比需增加另外一個動作,當增測到搖桿左右移動時,小貓會回到地面位置!注意這段程式是在主程式中判斷左右移動條件裡執行的。記得一開始我們記錄小貓在水平面的位置嗎(-70),我們把這個座標加到程式裡面,左移或右移都要加!


看看結果:


試試看:

由影片中看出小貓無論走、蹲、跳,都算很暢了,下一段要示範大家如何讓小貓能呈現左蹲的動作,進入下一階段之前,大家不妨自己想想看如何完成面朝左蹲的動作。

========================左蹲=======================
程式:L7_left_sit.sb

有沒有發現要讓小貓面朝左蹲,程式的撰寫不像第3課左走右走那麼容易?  原因是因為當左右走的時候,我們直接從搖桿的左右移就可以判斷,但是蹲下去這個動作,無論面朝左或面朝右,搖桿都是朝下移動的,我們必須先知道小貓蹲下前是面朝左還是面朝右,根據小貓最後的狀態才能判斷蹲下去時臉要朝哪一個方向。

針對此,我們先建立一個變數,命名為dir (方向 direction),此變數當成旗標用來記錄小貓行進(臉)的方向:


我們讓小貓朝右行進時,dir旗標=1,朝左行進時,dir旗標=0,程式很簡單,當我們判斷出搖桿朝左或右方挪時,就能夠順便設定此方向旗標。


有了dir旗標,我們就能判定要蹲下前的小貓是朝著左邊還是右邊,把這個結果當成蹲下去後設定方向的條件。


看看結果:


=======================站起來=======================
程式:L7_sit_stand.sb

我們完成了用搖桿讓小貓蹲下去的程式,但必須等到左右移動的時候,小貓才會再次站起來移動,接下來我們要加入這一課的最後一段程式,讓小貓在沒有操作搖桿的情況下就會站起來,也就是當我們把搖桿往下移動時,小貓蹲下去,當把搖桿放開回到中心點時,小貓站起來。

根據以上的邏輯,我們規劃了以下的程式區段,最外層的條件 (Analog1>300),也就是搖桿Y軸離開下方時,我執行了括弧中的動作。

括弧中我們做了什麼判斷才能正確地執行站立的動作呢? (1)首先利用 dir確認目前的方向 (2) 利用搖桿位置確認小貓是沒有移動的 (搖桿在中心位置)。當以上兩點同時成立時,我們讓小貓站起來。
 

把以上這段程式拖到蹲下去的程式中,就能觀察執行結果了


看看結果:


完成後,我們把這段程式併到主程式中,我們可以很清楚地看出主程式判斷的5個動作
(1) 向右走
(2) 向左走
(3) 跳躍
(4) 蹲坐
(5) 站立


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

我們在這一課建立了旗標的概念,利用dir方向旗標來記錄小貓的方向,以擬補搖桿Y軸無法判斷左右方向的不足。希望大家透過這個範例,往後能常常利用到此概念解決程式上的問題。

小貓該有的基本動作都有了,我們在下一課加入背景移動,讓小貓動起來像卡通動畫一樣。

<< 第6課 : 拋物線跳
>> 第8課 : 背景移動
====================================
fayalab 粉絲團

沒有留言:

張貼留言