LibGDX:boundsInFrustrum和BoundingBox无法按预期工作

时间:2016-03-28 16:36:24

标签: java math libgdx collision-detection

我正在从json文件加载box2d场景。这个场景包含一个标记允许摄像机进入的边界框的夹具。使用这种机制对于下边界和左边界都可以正常工作,但对于上边界和右边界完全失败,这是相当奇怪的。

以下是从文件中加载边界框的部分:

stockItem *stockItem_new(char *componentType, char *stockCode, int numOfItems, int price){
   // creates a new duration for the song
   stockItem *item = (stockItem*)malloc(sizeof(stockItem));

   // assigns the attributes
   item->componentType   = componentType;
   item->stockCode = stockCode;
   item->numOfItems = numOfItems;
   item->price = price;
   // returns it
   return item;
}

在相机平移时调用以下部分:

PolygonShape shape = ((PolygonShape) fixture.getShape());
Vector2 vertex = new Vector2();
float boundLeft = world.startX, boundRight = world.startX, boundUp = world.startY, boundLow = world.startY; // The location of the camera as initial value

for (int i = 0; i < shape.getVertexCount(); i++) { // Itarate over each vertex in the fixture and set the boundary values
    shape.getVertex(i, vertex);
    vertex.add(body.getPosition());
    boundLeft = Math.min(vertex.x, boundLeft);
    boundLow = Math.min(vertex.y, boundLow);
    boundRight = Math.max(vertex.x, boundRight);
    boundUp = Math.max(vertex.y, boundUp);
}

// Build the bounding boxes with enough thickness to prevent tunneling on fast pans
world.boundLeft = new BoundingBox(new Vector3(boundLeft - 5, boundLow - 5, 0).scl(RenderingSystem.PPM), new Vector3(boundLeft, boundUp + 5, 0).scl(RenderingSystem.PPM));
world.boundRight = new BoundingBox(new Vector3(boundRight, boundLow - 5, 0).scl(RenderingSystem.PPM), new Vector3(boundRight + 5, boundUp + 5, 0).scl(RenderingSystem.PPM));
world.boundUp = new BoundingBox(new Vector3(boundLeft - 5, boundUp, 0).scl(RenderingSystem.PPM), new Vector3(boundRight + 5, boundUp + 5, 0).scl(RenderingSystem.PPM));
world.boundLow = new BoundingBox(new Vector3(boundLeft - 5, boundLow - 5, 0).scl(RenderingSystem.PPM), new Vector3(boundRight + 5, boundLow, 0).scl(RenderingSystem.PPM));
// world is a class containing some properties, including these BoundingBoxes
// RenderingSystem.PPM is the amount of pixels per metre, in this case 64

1 个答案:

答案 0 :(得分:0)

好吧,我明白了。猜猜我的world.startx和world.startY被定义为什么?没错,他们在屏幕坐标中:

world.startX = start.getPosition().x * RenderingSystem.PPM;
world.startY = start.getPosition().y * RenderingSystem.PPM;

这导致Math.max总是选择world.startX和world.startY,因为这些值绝对是相当大的。