偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 )
雖然 Scratch 可以偵測鍵盤按鍵,但如果要多個的鍵盤按鍵,就得使用大量的程式積木,造成冗長且不容易維護的程式碼,這篇教學會實作偵測鍵盤按鍵的方式,除了可以讓 Scrtatch 偵測空白、上下左右鍵與數字和英文字母,更能夠偵測 Enter 鍵與所有的特殊符號 ( 例如 !、@、+、- 等 )。
基本偵測鍵盤按鍵參考:按下與放開鍵盤
快速導覽:
建立空白角色和區域變數
首先使用「繪畫」功能建立一個新的角色,將角色命名為「Detector」,這個角色是一個「空」的角色,只需要一個「空白」的造型,主要負責偵測按下了哪些鍵盤按鍵,按下按鍵後就會發送廣播訊息。
從左側積木清單裡建立兩個區域變數 $_n 和 $_string,勾選「僅適用當前角色」,由於是區域變數特性,別的角色中不會出現這兩個變數,就不會造成干擾。
延伸參考:深入理解「區域變數」
從左側積木清單裡建立一個清單 $_list,勾選「僅適用當前角色」,將這清單建立為區域變數。
建立按鍵清單
將 $_string 的內容填入「鍵盤所有的按鍵數值」,包含按下 shift 才會出現的特殊符號,例如「%、!、$」等,接著運用重複迴圈的方式,將 $_string 裡的每一個文字儲存到 $_list 清單裡,將文字轉換成清單,這個清單主要作為「按下鍵盤時,找出按下哪個按鍵」的按鍵清單。
偵測鍵盤按鍵函式
建立一個名為「keyCode」的全域變數,勾選「適用於所有角色」,這個變數負責會紀錄按下了哪個按鍵,再由其他的角色讀取數值。
建立名為「keyboard」的函式,勾選「執行完畢再更新畫面」。
編輯韓式內容,一開始將 keyCode 設為「enter」,接著依序取出 $_list 清單裡的每個項目進行判斷,如果判斷按下了哪個按鍵,就將 keyCode 的數值設為該按鍵的名稱,也就是判斷成功當下的「清單的項目」。
由於按下 Enter 鍵不會回傳任何數值,所以一開始先將 keyCode 的內容設為 enter,如果後續的過程沒有修改 keyCode,表示按下的是 Enter 鍵。
因為空白和上下左右鍵也沒有回傳值,但因為 Scratch 本身提供了判斷積木,直接使用內建的積木進行判斷,判斷按下空白鍵時將 keyCode 的內容設為 enter,上下左右分別設定為 up、down、left 和 right。
使用廣播,傳送鍵盤按鍵訊號
修改原本點擊綠旗的程式,在下方加入重複無限次積木,使用「等待」積木等待按下按鍵後,執行 keyCode 函式,函式執行後發送廣播,廣播內容則會使用「keyCode 的數值」或「keydown」作為廣播訊號,最後等待放開鍵盤按鍵後,再進行下一次偵測。
兩次等待的做法可以避免按下鍵盤時重複偵測。
使用其他角色測試
加入一個新角色,設定角色收到「keydown」廣播訊號時,講出 keyCode 的數值,執行後按壓鍵盤按鍵,就會看見角色講出對應的按鍵值。
因為按下按鍵時也會發送「按鍵數值」,所以接收廣播時也能透過「新的訊息」輸入指定數值,就能實現「收到什麼訊號就做什麼事」的效果,下方範例會控制貓咪的上下左右移動。
完成效果
完成後,點擊綠旗,按下鍵盤按鍵,就會看見貓咪說出按鍵內容 ( 要注意只能使用「英文輸入法」 )。
範例解答
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~