侦测所有键盘按键
虽然 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 的数值,执行后按压键盘按键,就会看见角色讲出对应的按键值。
因为按下按键时也会发送“按键数值”,所以接收广播时也能透过“新的消息”输入指定数值,就能实现“收到什么信号就做什么事”的效果,下方范例会控制猫咪的上下左右移动。
完成效果
完成后,点击绿旗,按下键盘按键,就会看见猫咪说出按键内容 ( 要注意只能使用“英文输入法” )。
微信扫码关注
抖音扫码关注