有时候仅仅使用网格的位置来进行碰撞检测显得不够精确,因此 Greenfoot还提供了几个方法来检测游戏角色的图像是否发生了重叠。

1、getOneIntersectingObject(java.lang.Class cls)

返回一个与本对象相交的指定类型的其他对象。该方法会考虑图片尺寸所带来的伸展。

参数:cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)

例如我们在树袋熊里面再添加一个判断是否碰倒叶子的方法

Greenfoot的基本功能和使用方法之基于角色图像的碰撞检测

然后在act方法里添加一段测试代码,这样我们运行的时候,只要树袋熊碰到叶子就会播放声音,并吃掉叶子。

Greenfoot的基本功能和使用方法之基于角色图像的碰撞检测

这些方法相比于基于网格的方法,需要更大的计算量,如果游戏中生成了很多角色对象,则可能会大大地降低程序的执行速度。

2、isTouching(java.lang.Class cls)

检测本对象是否与任何指定类型的其他对象相接触。

参数:cls - 搜索的对象类型(若传入“null”则会搜索所有类型的对象)

我们修改一下上面的touchLeaf()方法,如图所示

Greenfoot的基本功能和使用方法之基于角色图像的碰撞检测

再来运行看看,当树袋熊碰到叶子也会播放声音。

还有其它的方法也能达到同样的效果,不过使用isTouching会更简单和直观一些。