Libgdx Box2D 仅控制少数特定对象的碰撞响应

问题描述 投票:0回答:2

Box2d
中,据我所知,对象具有默认的碰撞响应,这可以让它们停止移动或反弹(如果您设置了恢复)。
您也可以说该对象是传感器,因此您可以实现自己的碰撞响应。
现在我想对某些类型的碰撞使用默认的碰撞响应,同时我想完全控制与特定对象的碰撞。
例如:如果玩家撞到墙壁,则应该停止移动或反弹,但如果撞到子弹,则应该失去 Hp,并且应该将子弹移走。
所以我想要类似接触过滤器的东西,但是与过滤器不匹配的对象应该以默认行为做出反应。

这样的事情可能吗?
我怎样才能做到这一点?

谢谢

java libgdx box2d
2个回答
2
投票

使用

CollisionListener
并检查您的灯具/主体的用户数据以了解该类型。然后你就可以随心所欲地处理它。如果你不希望玩家/子弹碰撞有反应,你应该禁用
Contact
中的
preSolve
(通过
Contact.setEnabled(false)
)并标记要销毁的子弹。

在这种情况下,拥有强大的碰撞处理系统是必要的。我创建了一个要点,展示了我如何通过所谓的

CollisionHandler
来做到这一点。它们负责每种类型的 EntityA 与 EntityB 冲突。
CollisionFilter
已经可以预先过滤总共的碰撞,然后
CollisionListener
将确定正确的
CollisionHandler
并将回调转发给那些。它使用反射,可能不是处理大量物体和碰撞的最快方法,但到目前为止我没有遇到任何问题。

您可以在这里找到要点。


1
投票

这个基础知识是这样的:

http://pastebin.com/9vzZUbTT

所有灯具的用户数据都应该有自己的特定名称。

这对我有用!

实体类包含body和fixture。

编辑:可能不是你想要的,但它是一些东西

Edit2:http://pastebin.com/Cw0R7hmq类似这样的东西,可能有很多编译错误,但我希望你明白我想说的。

© www.soinside.com 2019 - 2024. All rights reserved.