首页 理论教育 Android游戏开发:Body碰撞监听

Android游戏开发:Body碰撞监听

时间:2023-10-22 理论教育 版权反馈
【摘要】:在Box2D中提供了类b2ContactListener,在此类里面提供了对碰撞发生结束处理的几个方法。和Contact listener一样,Box2D有一个名为b2ContactFilter的类,我们可以在这里进行扩展以控制注册与何种物体起冲突。然后用如下代码实现类Ball、Tree和Cloud为了初始化Box2D的物体,接下来可以通过此方法使用自定义的接触监听器和接触过滤器。接下来将通过一个实例的实现过程,详细讲解在Box2D世界中对Body进行碰撞监听的方法。编写实例文件MySurfaceView.java实现一个物理世界,并实现碰撞监听。

Android游戏开发:Body碰撞监听

物理世界的刚体进行碰撞了该如何检测?在Box2D中提供了类b2ContactListener,在此类里面提供了对碰撞发生结束处理的几个方法。

978-7-111-54543-9-Part03-150.jpg

类b2ContactListener是一个抽象类,我们需要自己写一个类来继承它。然后在物理世界中注册它就可以了:

978-7-111-54543-9-Part03-151.jpg

通过使用Contact Listeners,可以控制一个对象如何跟一个碰撞起反应。其实Box2D有它自己的接触监听器类:b2ContactListener。我们可以根据自己的需求来扩展此类,例如下面的代码。

978-7-111-54543-9-Part03-152.jpg

978-7-111-54543-9-Part03-153.jpg

例如在编者的项目中,所有游戏对象都继承于基类GameObject,里面有两个方法:HandleContact()和HandleNonObjContact(),这两个方法被大量的游戏对象重写。这表示可以根据不同的游戏对象,通过修改这些方法可以实现各种个性化的碰撞反应。例如想让一棵树被球碰撞后让它放大,则可以用如下代码实现:

978-7-111-54543-9-Part03-154.jpg

现在只要树被一个Ball碰撞,它就会调用方法BlowUp()。

其实Contact Filters可以让我们控制事物与其他彼此起冲突。和Contact listener一样,Box2D有一个名为b2ContactFilter的类,我们可以在这里进行扩展以控制注册与何种物体起冲突。当想让Ball和树可以产生碰撞效应,而和云不能产生碰撞效应,此时可以用下面的代码实现。

978-7-111-54543-9-Part03-155.jpg

978-7-111-54543-9-Part03-156.jpg

然后用如下代码实现类Ball、Tree和Cloud

978-7-111-54543-9-Part03-157.jpg(www.xing528.com)

为了初始化Box2D的物体,接下来可以通过此方法使用自定义的接触监听器和接触过滤器。

978-7-111-54543-9-Part03-158.jpg

978-7-111-54543-9-Part03-159.jpg

接下来将通过一个实例的实现过程,详细讲解在Box2D世界中对Body进行碰撞监听的方法。

978-7-111-54543-9-Part03-160.jpg

编写实例文件MySurfaceView.java实现一个物理世界,并实现碰撞监听。主要代码如下

978-7-111-54543-9-Part03-161.jpg

978-7-111-54543-9-Part03-162.jpg

978-7-111-54543-9-Part03-163.jpg

978-7-111-54543-9-Part03-164.jpg

978-7-111-54543-9-Part03-165.jpg

执行后的效果如图12-13所示

978-7-111-54543-9-Part03-166.jpg

图12-13 执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈