友情提示:680元/半年,儿童学编程,就上码丁实验室。
在用Scratch制作游戏或动画的过程中,常常需要检查一个角色的位置及与周围角色或环境的关系,包括碰撞和距离等,以便进行相应的操作和处理。基于Scratch提供的功能,可以有多种方式实施检测。
我们先看一下,在Scratch中提供了哪些与检测相关的积木。
可以看到,Scratch提供了比较多的碰撞检测方式,包括碰到边缘就反弹、碰到角色、碰到边缘、碰到鼠标指针、碰到颜色、颜色碰到颜色、与角色(或鼠标)之间的距离等。

基于这些积木及一些技术,我们可以让角色对周围的环境进行检查。可以称之为“探测器”。
我将通过几个专辑来进行探测器方面的介绍,应用不同的技术完成探测器。使用的技术包括:位置探测器、颜色探测器、造型探测器、尺寸探测器、角度探测器及数学探测器等。


本篇先对于位置探测器进行说明
我们在制作弹球等游戏时,需要球在碰到边框或球拍时反弹,在战斗游戏中当敌人遇到子弹时消失。这些实际上就是在使用位置探测器。
下面使用一个简单的实例,生成多个随机位置落下的球,当球碰到下面的板时停止运动。
如果如下图所示:
可以看到,由于每次球移动的步长较大,所以可能在角色已经与板有交叉后,球才会停止运动。
一般采用的方式是后退一次步长。
如下面的程序所示。
结果如下:
由于后退,角色会退到没有发生碰撞的位置,但结果就是会在球与板中间留下一定的空隙。
这个方法能够得到较好的结果,但可能在非加速模式下会看到球移动寻找碰撞点的过程,而且也会影响运行的速度。
在判断多个角色之间的碰撞时,还有一个同时处理碰撞的冲突问题。即如果两个角色都各自判断是否与另外一个角色碰撞并之后消失时。则可能会出现一个角色能够判断到碰撞,而另一个角色无法判断到的情况。原因是在程序过程中,会在运行一个角色的检测碰撞程序后,才去运行另一个角色的检测程序。这时由于前一个角色已经消失,自然就判断不到了。
一般的解决办法是在每个角色判断碰撞后,都加上一个小的延时,以便给另一个角色一定的时间去进行判断。
例如下面程序所示
总结
1 探测器是重要的概念及技术,能够用于检测周围的环境,满足游戏及动画中的需求。
2 在使用位置进行碰撞检测时,由于每次移动一定的步长,所以不可能立即得到准确的碰撞点位置。
3 几种方法的分析:如果检测到碰撞立即停止运动,则可能产生交叉;如果退回相同的距离,则可能在角色之间产生空隙;如果使用小步长试探的方式,可以找到准确位置,但会降低速度。
4 在两个角色同时判断碰撞时,可能会出现无法判断到的情况,这时需要角色在判断到碰撞后等待一定的时间,便于另一个角色有时间判断碰撞。