LIBGDX Box2D World QueryAABB 不工作

LIBGDX Box2D World QueryAABB not working

所以我试图让我的世界中的身体在一个范围内,这是一个 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 直接位于骨折内部,我只会收到报告。我有一些图片可以向您展示我的意思。

不工作:

工作:

你怎么打电话给 getObjectsInRange? 因为 QueryAABB 只会报告区域内的对象。

我解决了问题,因为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