友情提示:380元/半年,儿童学编程,就上码丁实验室。
在本系列文章中,作者提出了对周围环境进行探测的“探测器”概念。
给出了探测器的多种分类,并进行了研究和说明。
1基于角色运动的“位置探测器”
2基于大小的“尺寸探测器”
3基于不同造型的“造型探测器”
4基于颜色的“颜色探测器”
5“扫描探测器”
(点击以上文字,可阅读原文。)
上面这些探测器,无一例外地使用了碰撞检测,包括角色与角色的碰撞、颜色的碰撞等。但有的时候还是需要在非接触的情况下对环境进行探测。

今天我们就来讨论:

在Scratch中,有一类的检测器是属于非接触的探测器。可以探测到某个角色的方向及距离,今天我们就对这类的方法进行研究。并命名为“非接触探测器”。
我们研究一下系统提供的积木,可以看到,有几个用于探测距离和方向的积木。
① 另一个是到鼠标或角色的距离,相当于探测了相对的距离。
② 一个是面向鼠标或另一个角色的面向,相当于探测了相对的方向
下面我们做一个有趣的小程序,演示一下这两个探测器的使用。
小猫闯入了一个不很友好的箭头丛林,在经过丛林时,箭头会在一定范围内指向小猫。效果如下。
小猫可以跟随鼠标运动或以其它的方式运动。重要的是每个箭头可以在一定的范围内指向小猫角色。
01
首先制作小猫的程序,简单地跟随鼠标运动。
02
下面是箭头的程序,使用克隆的方式生成多个角色。
其中mbClone还是用于判断是否是克隆体的标志,使用Y和X的循环,生成100个小的箭头。
03
下面是箭头克隆体的程序。
在克隆体生成后,就一直检查到小猫角色的距离,如果距离小于100,则指向角色,如果距离大于等于100,则面向默认的90度方向。
扩展:大家还可以考虑一下如何修改这个程序,比如在改变方向的同时根据距离改变角色的大小及特效;指向不同方向;增加位置的变化等。
1 需要注意所有的指向及距离计算,都是基于角色中心的,所以一定要保证正确设置角色的中心点。
2 与碰撞式的方式不同,即使角色处于隐藏的状态,这类探测器也能够正常工作,而且不受颜色及特效的影响。
3 如果想指向一个不存在的位置,可以使用“无中生有“的方式,参见之前的文章。
4 由于此方法只能够检测到某个角色或鼠标的方向和坐标,所以对于背景上的颜色变化等不会有反应。
总结
1 使用非接触式探测器,可以计算两个角色之间的距离及方向关系。
2 这样的探测器,可以模拟接近、引力、感知范围等效果。
3 使用下面这个积木,能够得到其它角色的方向及坐标。也可以算作非接触探测器。