2016-03-05 107 views
0

所以我試圖讓我的世界中的身體在一個範圍內,這是一個square(AABB)LIBGDX Box2D世界QueryAABB不工作

這是我的代碼:

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是直接在fricture內。我有一些圖像來向你展示我的意思。

不工作: Not working :(

工作: Working :)

回答

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

0

你怎麼打電話getObjectsInRange? 由於QueryAABB只會報告區域內的對象。