gpt4 book ai didi

java - Box2D - 不能破坏多个固定装置

转载 作者:行者123 更新时间:2023-11-30 11:19:35 31 4
gpt4 key购买 nike

我在我正在进行的项目中使用 box2d 和 libgdx。我在破坏 body / body 固定装置时遇到了一个小问题。本质上,我想完全摧毁 body ,我通过摧毁 body 的固定装置来做到这一点。对于带有一个固定装置的主体,一切都工作得很好,但是当我使用两个固定装置时,只有一个固定装置被破坏,而另一个固定装置则使主体完好无损。

这里有两张图来说明我的意思:

对于两个固定装置: With both fixtures

只有一个夹具: With only one fixture

下面是我创建主体的方式:

BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(level.character.position);
Body body = b2world.createBody(bodyDef);
body.setUserData(level.character);
level.character.body = body;

CircleShape polygonShapeHead = new CircleShape();
origin.x = level.character.circleBoundOrigin.x * 2.0f;
origin.y = level.character.circleBoundOrigin.y * 3.0f;
//polygonShapeHead.setAsBox(level.character.circleBoundOrigin.x,
//level.character.circleBoundOrigin.y, origin, 0);
polygonShapeHead.setPosition(origin);
polygonShapeHead.setRadius(level.character.circleBoundOrigin.x);
FixtureDef fixtureDefHead = new FixtureDef();
fixtureDefHead.shape = polygonShapeHead;
fixtureDefHead.friction = level.character.friction.x;
body.createFixture(fixtureDefHead);

polygonShapeHead.dispose();

PolygonShape polygonShapeBod = new PolygonShape();
origin = level.character.rectBoundOrigin;
polygonShapeBod.setAsBox(level.character.rectBoundOrigin.x,
level.character.rectBoundOrigin.y, origin, 0);
FixtureDef fixtureDefBod = new FixtureDef();
fixtureDefBod.shape = polygonShapeBod;
fixtureDefBod.friction = level.character.friction.x;
body.createFixture(fixtureDefBod);

polygonShapeBod.dispose();

这是我销毁尸体的代码:

public static void removeSpecifiedBodies() {
for (Body body : bodiesToRemoveList) {
Array<Fixture> fixtures = body.getFixtureList();
for (Fixture fixture : fixtures) {
body.destroyFixture(fixture);
}
}
bodiesToRemoveList.clear();
}

我在执行 b2world 后调用此静态方法。我检查了日志记录,fixtures 大小为 2,它运行了两次,但只有一个 fixture 被销毁了。为什么会这样?什么正在被摧毁?它运行了两次,但我只看到其中一个被破坏了。

编辑:我没有使用上面的删除方法,而是添加了

for(Body body : CollisionHandler.bodiesToRemoveList)
b2world.destroyBody(body);

在 b2world.step 之后,但它卡住了一切。 :(

最佳答案

GetFixtureList 只返回第一个灯具。你需要说

var fix = body.GetFixtureList();
while (fix) {
body.DestroyFixture(fix);
fix = fix.next();
}

关于java - Box2D - 不能破坏多个固定装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163728/

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