物理世界的刚体进行碰撞了该如何检测?在Box2D中提供了类b2ContactListener,在此类里面提供了对碰撞发生结束处理的几个方法。
类b2ContactListener是一个抽象类,我们需要自己写一个类来继承它。然后在物理世界中注册它就可以了:
通过使用Contact Listeners,可以控制一个对象如何跟一个碰撞起反应。其实Box2D有它自己的接触监听器类:b2ContactListener。我们可以根据自己的需求来扩展此类,例如下面的代码。
例如在编者的项目中,所有游戏对象都继承于基类GameObject,里面有两个方法:HandleContact()和HandleNonObjContact(),这两个方法被大量的游戏对象重写。这表示可以根据不同的游戏对象,通过修改这些方法可以实现各种个性化的碰撞反应。例如想让一棵树被球碰撞后让它放大,则可以用如下代码实现:
现在只要树被一个Ball碰撞,它就会调用方法BlowUp()。
其实Contact Filters可以让我们控制事物与其他彼此起冲突。和Contact listener一样,Box2D有一个名为b2ContactFilter的类,我们可以在这里进行扩展以控制注册与何种物体起冲突。当想让Ball和树可以产生碰撞效应,而和云不能产生碰撞效应,此时可以用下面的代码实现。
然后用如下代码实现类Ball、Tree和Cloud
(www.xing528.com)
为了初始化Box2D的物体,接下来可以通过此方法使用自定义的接触监听器和接触过滤器。
接下来将通过一个实例的实现过程,详细讲解在Box2D世界中对Body进行碰撞监听的方法。
编写实例文件MySurfaceView.java实现一个物理世界,并实现碰撞监听。主要代码如下
执行后的效果如图12-13所示
图12-13 执行效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。