Libgdx Ashley Entity Collision

时间:2015-05-04 03:36:55

标签: java libgdx

我正在尝试用libgdx和ashley制作游戏。我对两者都有基本的了解,并且想知道如何处理实体冲突。

我在Box2D中看到了一个ContactListener,但我不确定如何将它与ashley中的实体联系起来。

我只是想阻止实体通过其他实体。

1 个答案:

答案 0 :(得分:0)

以下是我自己实施的一种方法:

  1. 定义接口CollisionListener:

    public interface CollisionListener {     void onBeginContact(Body bodyA,Body bodyB); }

  2. 创建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());
    
  3. 在任何系统中实现CollisionListener,它应该处理冲突并在CollisionSystem构造函数的collisionListener列表中传递它