准备用Scratch实现一个简易的计算器,虽然功能简易,只是实现加减乘除的运算,实机地摊价可能都难以叫上10块。但实际执行起来,还是会遇到很多的难题,比如今天要聊的话题,对多个按键进行绑定以及按键检测。
测试用例的下载
实现的步骤
按照惯例,先提供了半成品的案例下载,毕竟为了节约博客有限的带宽,连图片都被博主硬生生压缩到了只确保能辨认的清晰度。亲们要是看不清的话,可以直接对照实例文件。
再简单的计算器,基础的输入键还是需要提供的,加减乘除,从0~9的数字,以及清屏按键之类的。算下来有10多个图形,因为是个体力活,大家可以直接用博主提供的半成品。半成品里已经做好了位置的布局,点击绿旗后,在对应位置生成一批克隆体的按键,没按绿旗之前不是也有按键么?恩,那个只是一张包含按键的图片而已,为了确保能够被点击,程序开始后才真正去放置按键,在此之前,有个图片垫底,看起来是不是没有那么突兀了:)。
因为想要实现同时接受按键与鼠标输入,所以定制了一个键位表,生成克隆体的时候会赋予每个克隆体一个私有变量“keyName”,存储的就是下图中这个键位表中的值,这样鼠标点击某个按钮时,只需要去提取“keyName”的值就可以了。
可以在生成克隆体后让让其报出自己的“keyName”来检测一下按键绑定的正确与否。比如像下面这样:
克隆体自报家门,“keyName”的值与按键图标保持一致,按键绑定完成。如果是鼠标操作的话,点选某个按钮就去取私有变量“keyName”的值,Scratch提供的鼠标功能足够完成这一任务,这里我们略过不表,主要来看一下键盘事件的检测。
博主的检测思路是这样的,每个克隆体各自重复轮流查询我们的列表“键位表”,如果用户刚好按下了键位表中的某个键,就利用一个变量“keyCount”记录下当前的计数器的值,当克隆体的“keyName”与“键位表”中第“keyCount”的值一致时,就对该克隆体做一些改变颜色或取值的操作。
这是一个比较耗费资源的活计,建议亲们可以利用自定义积木来完成,顺便勾选一下左下角的“运行时不刷新屏幕”。
完整程序如下,如果打开了变量“keyCount”的屏幕显示,可以用一块重复执行的积木来测试一下按键输入,当按住某个列表内的键不动时,“keyCount”会保持为该按键对应的列表项的值。
比如这里按下了按键“8”,“keyCount”的值显示为10,对照键位表发现,列表第10项的值就是“8”。
最终想要实现的效果就是如上图这样,当按下按键时,让屏显键盘联动变色,实现这样的效果还需要增加几块积木,最终的程序如上图所示。
用递归的方式实现按键检测
近几天尝试了几个递归的案例,发现这个按键检测功能也可以利用递归来实现,顺便贴一下实现的思路,可以看到,相比较循环实现,递归实现可以少设置一个变量。