搜尋

偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 )

雖然 Scratch 可以偵測鍵盤按鍵,但如果要多個的鍵盤按鍵,就得使用大量的程式積木,造成冗長且不容易維護的程式碼,這篇教學會實作偵測鍵盤按鍵的方式,除了可以讓 Scrtatch 偵測空白、上下左右鍵與數字和英文字母,更能夠偵測 Enter 鍵與所有的特殊符號 ( 例如 !、@、+、- 等 )。

基本偵測鍵盤按鍵參考:按下與放開鍵盤

快速導覽:

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 )

建立空白角色和區域變數

首先使用「繪畫」功能建立一個新的角色,將角色命名為「Detector」,這個角色是一個「空」的角色,只需要一個「空白」的造型,主要負責偵測按下了哪些鍵盤按鍵,按下按鍵後就會發送廣播訊息

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 建立空白角色

從左側積木清單裡建立兩個區域變數 $_n 和 $_string,勾選「僅適用當前角色」,由於是區域變數特性,別的角色中不會出現這兩個變數,就不會造成干擾

延伸參考:深入理解「區域變數」

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 將這兩個變數建立為區域變數

從左側積木清單裡建立一個清單 $_list,勾選「僅適用當前角色」,將這清單建立為區域變數。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 將這清單建立為區域變數

建立按鍵清單

將 $_string 的內容填入「鍵盤所有的按鍵數值」,包含按下 shift 才會出現的特殊符號,例如「%、!、$」等,接著運用重複迴圈的方式,將 $_string 裡的每一個文字儲存到 $_list 清單裡,將文字轉換成清單,這個清單主要作為「按下鍵盤時,找出按下哪個按鍵」的按鍵清單。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 將文字轉換成清單

偵測鍵盤按鍵函式

建立一個名為「keyCode」的全域變數,勾選「適用於所有角色」,這個變數負責會紀錄按下了哪個按鍵,再由其他的角色讀取數值

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 建立一個全域變數

建立名為「keyboard」的函式,勾選「執行完畢再更新畫面」。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 執行完畢再更新畫面

編輯韓式內容,一開始將 keyCode 設為「enter」,接著依序取出 $_list 清單裡的每個項目進行判斷,如果判斷按下了哪個按鍵,就將 keyCode 的數值設為該按鍵的名稱,也就是判斷成功當下的「清單的項目」

由於按下 Enter 鍵不會回傳任何數值,所以一開始先將 keyCode 的內容設為 enter,如果後續的過程沒有修改 keyCode,表示按下的是 Enter 鍵

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 依序取出清單裡的每個項目進行判斷

因為空白和上下左右鍵也沒有回傳值,但因為 Scratch 本身提供了判斷積木,直接使用內建的積木進行判斷,判斷按下空白鍵時將 keyCode 的內容設為 enter,上下左右分別設定為 up、down、left 和 right。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 直接使用內建的積木進行判斷

使用廣播,傳送鍵盤按鍵訊號

修改原本點擊綠旗的程式,在下方加入重複無限次積木,使用「等待」積木等待按下按鍵後,執行 keyCode 函式,函式執行後發送廣播,廣播內容則會使用「keyCode 的數值」或「keydown」作為廣播訊號,最後等待放開鍵盤按鍵後,再進行下一次偵測。

兩次等待的做法可以避免按下鍵盤時重複偵測

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 直接使用內建的積木進行判斷

使用其他角色測試

加入一個新角色,設定角色收到「keydown」廣播訊號時,講出 keyCode 的數值,執行後按壓鍵盤按鍵,就會看見角色講出對應的按鍵值。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 使用其他角色測試

因為按下按鍵時也會發送「按鍵數值」,所以接收廣播時也能透過「新的訊息」輸入指定數值,就能實現「收到什麼訊號就做什麼事」的效果,下方範例會控制貓咪的上下左右移動。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 使用其他角色測試

完成效果

完成後,點擊綠旗,按下鍵盤按鍵,就會看見貓咪說出按鍵內容 ( 要注意只能使用「英文輸入法」 )。

Scratch 教學 - 偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 ) - 使用其他角色測試

範例解答

範例解答:偵測鍵盤按鍵 ( Enter 鍵、英文數字、特殊符號 )

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

Scratch 教學

基本介紹

關於 Scratch 使用 Scratch 3 註冊與登入 操作介面 我的東西

圖形與聲音

繪製造型&背景 編輯音效

程式積木

積木種類 動作 外觀 音效 事件 控制 偵測 運算 變數 清單 函式積木

擴充功能

音樂 畫筆 視訊偵測 文字轉語音 翻譯

技巧&觀念

全域變數、區域變數 深入理解區域變數 控制指定分身 控制所有分身的方法 雲端變數 雲端變數記錄文字 變數串接文字 判斷英文字母大小寫 中斷與停止程式 廣播訊息並等待 鍵盤與滑鼠 滑鼠點擊與長按 偵測所有鍵盤按鍵 點擊隱藏的角色 突破角色尺寸限制 角色與舞台邊界 重複積木的等待時間 音樂暫停與繼續播放 使用造型名稱建立清單 使用造型代替變數 文字轉清單 清單合併為文字 判斷兩個清單是否相同 複製清單、反轉清單 清單數字排序 清單最大值最小值

入門範例

鍵盤控制貓咪 指向中間的箭頭 水果音樂鋼琴 貓咪的影分身之術 貓咪的細胞分裂 螃蟹跑來跑去 吃水果 摸蝴蝶 小狗追棒球 魚兒水中游 小鳥往前飛 舞棍阿伯 小時鐘 搖骰子 轉動的眼球 抽獎輪盤 大樂透電腦選號 卡牌抽籤 ( 20 中 1 ) 移動到邊緣切換場景 人物依序跳舞 ( 廣播 ) 按鈕控制貓咪 ( 廣播 )

進階範例

貓咪跑步 ( 連續背景 ) 貓咪跑步 ( 超長背景 ) 大型數字 ( 圖形數字 ) 拖拉怪獸碰撞牆壁 鍵盤鋼琴 ( 記錄音符 ) 中文字逐字稿 英文字逐字稿 計算機 1 ( 顯示數字 ) 計算機 2 ( 加減乘除 ) 雲端聊天室 音樂播放器 推貓咪 ( 視訊偵測 ) 圍捕小魚 ( 視訊偵測 ) 戳泡泡 ( 視訊偵測 )

視覺特效範例

視差效果 水中吐泡泡 雪花隨風飄 鍵盤鋼琴 ( 音符動畫 ) 無限循環畫中畫 水底探照燈 狙擊望遠鏡 ( 兩倍變焦 ) 貓咪萬花筒 仙女棒 ( 光跡效果 ) 駭客任務背景特效 放煙火 1 ( 往上發射 ) 放煙火 2 ( 爆炸效果 )

繪圖範例

鏡射畫圖 ( 對稱圖形 ) 小畫家 ( 舞台上畫圖 ) 記錄畫圖軌跡 繪製圓形 繪製橢圓形 繪製立方體 ( 會動 ) 繪製正多邊形 繪製正多角星形 ( 單純 ) 繪製正多角星形 ( 多線 ) 繪製拋物線 繪製折線圖 繪製圓餅圖 繪製圓餅圖 ( 指示線 ) 蜘蛛結網 ( 八邊形網 ) 繪製舞台方格 繪製正弦波形 ( sin ) 正弦波毛毛蟲動畫 顯示聲波圖形

物理&模擬範例

鐘擺運動 簡單磁鐵效果 兩個磁鐵的磁力線 立體空間 ( 三度空間 ) 循跡移動 拋物線發射炮彈 地球繞著太陽轉 彈跳的籃球 電風扇 ( 控制強度 ) 拉不走的彈力球 慣性移動 ( 滑鼠 ) 慣性移動 ( 鍵盤 )

入門遊戲範例

猴子接香蕉 打地鼠 打地鼠 ( 體感視訊偵測 ) 刮刮樂 吹風機吹頭髮 太空狗閃躲隕石 九九乘法測驗 英文單字測驗 釣魚遊戲 拍西瓜 ( 儲存最高分 ) 寶可夢猜猜我是誰 ( 基本 ) 形狀配對拼圖 台灣地圖拼圖 英文打字機 英文打字機 ( 判斷大小寫 ) 射擊外星人 猜數字 ( 猜大小 ) 猜數字 ( 幾 A 幾 B ) 連連看 ( 產生器 ) 連連看

進階遊戲範例

青蛙過河 青蛙過馬路 反彈球 ( 乒乓球 ) 打磚塊 狙擊氣球 ( 兩倍變焦 ) Flappy Bird Flappy Bird ( 聲控版 ) 走迷宮 ( 基本 ) 大型迷宮 ( 鍵盤控制 ) 大型迷宮 ( 滑鼠控制 ) 翻卡記憶遊戲 翻卡記憶遊戲 ( 改良版 ) 井字棋 ( 圈圈叉叉 ) 九宮格拼圖 九宮格拼圖 ( 改良版 ) 音階記憶 貪吃蛇 ( 分身版 ) 貪吃蛇 ( 畫筆版 ) 小雞下樓梯 拉霸機

團康遊戲範例

搖骰子 ( 1~3 個 ) 比手畫腳 ( 猜動物 ) 音樂傳球遊戲 大聲公 ( 比賽誰的氣長 ) 抽籤 ( 可調整中籤數量 ) 轉盤指針 ( 指到誰就當鬼 ) 倒數計時器 ( 基本版 ) 倒數計時器 ( 大數字版 )

遊戲設計技巧

角色 ( 地上移動 ) 角色 ( 蹲下、左右轉 ) 角色 ( 跳耀、兩段跳 ) 角色 ( 牆壁、爬牆 ) 地圖 ( 清單轉換 ) 地圖 ( 二維陣列 ) 地圖 ( 控制移動 ) 地圖 ( 牆壁碰撞偵測 ) 地圖 ( 吃東西偵測 ) 俄羅斯方塊 ( 角色與背景 ) 俄羅斯方塊 ( 移動與碰撞 ) 俄羅斯方塊 ( 放置方塊 ) 俄羅斯方塊 ( 消除完成方塊 ) 俄羅斯方塊 ( 下個形狀 )