gpt4 book ai didi

java - 如何查询某个区域的Box2D-body?

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:18 24 4
gpt4 key购买 nike

我想获取一定半径内的所有Box2D实体。

据我所知,我需要使用 QueryCallback。我尝试这样:

private def getBodies(position: Vector2, radius: Float): LibgdxArray[Body] =
{
val lowerBound = new Vector2(position - radius)
val upperBound = new Vector2(position + radius)

val bodies: LibgdxArray[Body] = new LibgdxArray[Body]

val callback: QueryCallback = new QueryCallback
{
override def reportFixture(fixture: Fixture): Boolean =
{
bodies.add(fixture.getBody)
true
}
}

world.queryAABB(callback, lowerBound.x, lowerBound.y, upperBound.x, upperBound.y)

bodies
}

我的问题是,我总是得到一个空的 LibgdArray。除了在世界上调用 queryAABB 之外,我还需要做其他事情吗?我的代码不正确吗?

编辑:好吧,我根本不明白这一点:我将半径设置为更大的值。我可以删除静态物体,但动态物体根本不在乎:(

我这样添加它们:

if(Gdx.input.isButtonPressed(Buttons.RIGHT))
{
val mousePos: Vector3 = new Vector3(Gdx.input.getX, Gdx.input.getY, 0)
val worldPos = camera.unproject(mousePos)

val ballShape: CircleShape = ShapeFactory.circle(new Vector2(worldPos.x, worldPos.y), 0.5f)
val ballDef: BodyDef = new BodyDef
ballDef.`type` = BodyType.DynamicBody
val ballBody = world.createBody(ballDef)
ballBody.createFixture(ballShape, 0.5f)

ballShape.dispose
}

最佳答案

潜在的解决方案

如果要查找给定区域内的所有对象,一种方法是首先找到世界上最小对象的大小,然后迭代测试该区域中从起点到终点(假设是矩形区域)的所有点,迭代步长等于找到的最小大小的一半(以避免意外跳过它们)。

示例代码:

求最小面积迭代步骤:

public static float smallestStep(World world) {
//Start min size at max float value
Vector2 minSize = Float.MAX_VALUE;
//Gets bodies in world
Array<Body> bodies = new Array<Body>();
world.getBodies(bodies);

//Iterate over every body
for(Body body: bodies) {
//Iterate over each fixture for each body
for(Fixture fixture : body.getFixtureList()) {
//Get fixture shape
Shape shape = fixture.getShape();

//Check if shape's "radius" is smaller than current min value
if(shape.getRadius() < minSize) {
//Updates min size
minSize = shape.getRadius();
}
}
}

//Returns half of the min found value
return minValue / 2;
}

测试夹具是否包含给定点是下一步,通过迭代主体的所有夹具并将主体添加到列表中,如果主体的其中一个夹具包含使用 fixture.testPoint() 方法的点,您应该能够生成与给定点重叠的所有主体的列表。

关于java - 如何查询某个区域的Box2D-body?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31469767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com