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
所以我试图让我的世界中的身体在一个范围内,这是一个 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