最新消息:680元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

Scratch教程:碰撞点在哪里?

Scratch 少儿编程 5468浏览 0评论

友情提示:680元/半年,儿童学编程,就上码丁实验室

在用Scratch制作游戏或动画的过程中,常常需要检查一个角色的位置及与周围角色或环境的关系,包括碰撞和距离等,以便进行相应的操作和处理。基于Scratch提供的功能,可以有多种方式实施检测。

我们先看一下,在Scratch中提供了哪些与检测相关的积木。

碰撞点在哪里?

可以看到,Scratch提供了比较多的碰撞检测方式,包括碰到边缘就反弹、碰到角色、碰到边缘、碰到鼠标指针、碰到颜色、颜色碰到颜色、与角色(或鼠标)之间的距离等。

 

碰撞点在哪里?

基于这些积木及一些技术,我们可以让角色对周围的环境进行检查。可以称之为“探测器”。

探测器介绍  

我将通过几个专辑来进行探测器方面的介绍,应用不同的技术完成探测器。使用的技术包括:位置探测器、颜色探测器、造型探测器、尺寸探测器、角度探测器及数学探测器等。

 

碰撞点在哪里?
碰撞点在哪里?

         本篇先对于位置探测器进行说明

 

我们在制作弹球等游戏时,需要球在碰到边框或球拍时反弹,在战斗游戏中当敌人遇到子弹时消失。这些实际上就是在使用位置探测器。

基本思路
       通过改变角色的位置来确定是否与其它角色或边缘相碰。从位置探测器的定义说,就是靠移动角色来寻找在什么位置上产生碰撞。

下面使用一个简单的实例,生成多个随机位置落下的球,当球碰到下面的板时停止运动。

碰撞点在哪里?

碰撞点在哪里?

如果如下图所示:

碰撞点在哪里?

可以看到,由于每次球移动的步长较大,所以可能在角色已经与板有交叉后,球才会停止运动。

 

那么为了停止而不交叉,应该如何做呢?

      一般采用的方式是后退一次步长。

 

如下面的程序所示。

碰撞点在哪里?

结果如下:

碰撞点在哪里?

由于后退,角色会退到没有发生碰撞的位置,但结果就是会在球与板中间留下一定的空隙。

 

如果想让球正好停在档板上?
1
一个方法是在发现碰撞后使用小步长(例如1步)后退,直到不再碰撞为止。

碰撞点在哪里?

这个方法能够得到较好的结果,但可能在非加速模式下会看到球移动寻找碰撞点的过程,而且也会影响运行的速度。

 

碰撞点在哪里?

 

在判断多个角色之间的碰撞时,还有一个同时处理碰撞的冲突问题。即如果两个角色都各自判断是否与另外一个角色碰撞并之后消失时。则可能会出现一个角色能够判断到碰撞,而另一个角色无法判断到的情况。原因是在程序过程中,会在运行一个角色的检测碰撞程序后,才去运行另一个角色的检测程序。这时由于前一个角色已经消失,自然就判断不到了。

2

一般的解决办法是在每个角色判断碰撞后,都加上一个小的延时,以便给另一个角色一定的时间去进行判断。

例如下面程序所示

碰撞点在哪里?

 

 

 

总结

 

1    探测器是重要的概念及技术,能够用于检测周围的环境,满足游戏及动画中的需求。

2    在使用位置进行碰撞检测时,由于每次移动一定的步长,所以不可能立即得到准确的碰撞点位置。

3    几种方法的分析:如果检测到碰撞立即停止运动,则可能产生交叉;如果退回相同的距离,则可能在角色之间产生空隙;如果使用小步长试探的方式,可以找到准确位置,但会降低速度。

4     在两个角色同时判断碰撞时,可能会出现无法判断到的情况,这时需要角色在判断到碰撞后等待一定的时间,便于另一个角色有时间判断碰撞。

 

您必须 登录 才能发表评论!