友情提示:680元/半年,儿童学编程,就上码丁实验室。
本系列的上一次文章,已经探讨了如何通过改变一个角色的大小,自己作为自己的探测器,来检测与周围其它圆的距离。但这种方法也存在一定的问题,例如由于在不断改变角色的尺寸,会带来角色尺寸的不断变化,影响视觉的效果。
那么如何在不改变角色大小的情况下,对周围的角色进行探测呢?
关于钥匙的例子

大家知道,钥匙的原理是在锁内有很多的小弹子,会根据钥匙上面齿的形状不断上下运动,当上端恰好到达一个平面时,锁就打开了。
今天的这个例子,是想模拟一下弹子随钥匙形状的运动。
也就是在钥匙改变左右位置时,多个弹子能够随之上下运动。



在生成克隆体后。就可以设置为自动下落,碰到钥匙时停止运动。
如果钥匙的表面向下运动,弹子可以通过是否碰撞钥匙的判断发现,之后自动下落。但如果钥匙的表面向上运动,由于弹子一直保持与钥匙接触,所以很难判断出发生了运动。
如果按照之前位置探测器的方式,需要不断地移动弹子的位置。这样一方面是从视觉效果上不好,另一方面是在接触钥匙时,很难判断是向上探索还是向下探索。
怎么办呢?
我们的目标是让弹子保持在钥匙表面上方一定的距离。那么,如何保持一定的距离呢?既然弹子在这种情况下不与钥匙接触。我们是否可以设法再造一个造型用于保持距离呢?
这就是我们这个探测器的核心技术。也就是“使用多于一个的造型进行碰撞检测”。
我们一步步完成这个探测器。

将复制出来的造型命名为”seeker”(也就是“找球手”)。

这样有什么用呢?
现在就可以分别切换两个造型与钥匙进行碰撞的检测了。得到的碰撞情况组合不同,说明当前的位置不同,就便于作出运动的判断了。
我们列出表格对所有可能的情况组合进行分析。

程序的思路如下:首先判断造型Main是否与钥匙相碰,如果碰到,说明位置太低了,需要向上移动。如果没有碰撞,再使用Seeker造型进行检测,如果碰到,则不需要移动。如果也没有碰到,说明位置太高了,可以向下移动。
这样,使用切换造型加上简单的程序,就可以很方便地达到我们要求的效果。而且在钥匙表面上下变化的时候,弹子也会很迅速地移动到新的位置。
如果想改变弹子到表面的距离,可以改变底端下横线与底端的距离。
总结
1 造型探测器的核心思想是通过不同造型碰撞结果的条件组合,达到确定角色位置的作用。也就是通过角色的“变脸”来检测周围环境。
2 通过使用不同的造型进行碰撞检测,可以很方便地将角色保持在所需要的位置上。
3 此方法的优点在于,造型的切换基本不会影响显示的效果(特别是将探测点用浅颜色绘制时),可以提高运行的速度。
4 这篇文章只是提供了一个基本思路,大家还应该能够在此基础上发展出使用多个造型进行探测的方法。