我正在尝试用libgdx和ashley制作游戏。我对两者都有基本的了解,并且想知道如何处理实体冲突。
我在Box2D中看到了一个ContactListener,但我不确定如何将它与ashley中的实体联系起来。
我只是想阻止实体通过其他实体。
答案 0 :(得分:0)
以下是我自己实施的一种方法:
定义接口CollisionListener:
public interface CollisionListener { void onBeginContact(Body bodyA,Body bodyB); }
创建CollisionListenerSystem,将自身注册为世界联系人侦听器,并通知您的其他系统有关冲突的信息:
public class CollisionSystem implements ContactListener {
private final List<CollisionListener> collisionListeners;
public CollisionSystem(World world, List<CollisionListener> collisionListeners) {
world.setContactListener(this);
this.collisionListeners = collisionListeners;
}
@Override
public void beginContact(Contact contact) {
for (CollisionListener collisionListener : collisionListeners)
collisionListener.onBeginContact(contact.getFixtureA().getBody(), contact.getFixtureB().getBody());
在任何系统中实现CollisionListener,它应该处理冲突并在CollisionSystem构造函数的collisionListener列表中传递它