0

所以我试图让我的世界中的身体在一个范围内,这是一个square(AABB).

这是我的代码:

public List<MovableObject> getObjectsInRange(float x, float y, float x2, float y2) {
    final List<Fixture> list = new ArrayList<Fixture>();
    world.QueryAABB(new QueryCallback() {
        @Override
        public boolean reportFixture(Fixture fixture) {
            System.out.println(fixture);
            list.add(fixture);
            return true;
        }
    }, x, y, x2, y2);
    List<MovableObject> l = new ArrayList<MovableObject>();
    for (Fixture fixture : list) {
        l.add((MovableObject) fixture.getBody().getUserData());
    }
    return l;
}

但这实际上是,只有当AABB它直接在摩擦中时,我才会得到一份报告。我有一些图像向您展示我的意思。

不工作: 不工作:(

在职的: 在职的 :)

4

2 回答 2

0

你怎么叫getObjectsInRange?因为 QueryAABB 只会报告该区域内的对象。

于 2016-03-06T13:08:26.670 回答
0

我解决了这个问题,因为libgdx的y系统颠倒了,我不得不按照以下方式修改它

public List<MovableObject> getObjectsInRange(float x, float y, float x2, float y2) {
    final List<Fixture> list = new ArrayList<Fixture>();
    world.QueryAABB(new QueryCallback() {
        @Override
        public boolean reportFixture(Fixture fixture) {
            list.add(fixture);
            return true;
        }
    }, Math.min(x, x2), Math.min(y, y2), Math.max(x, x2), Math.max(y, y2));
    List<MovableObject> l = new ArrayList<MovableObject>();
    for (Fixture fixture : list) {
        l.add((MovableObject) fixture.getBody().getUserData());
    }
    return l;
}

我添加了 Math.min 和 Math.max

于 2016-03-07T14:13:24.660 回答