我在游戏中使用的精灵具有复杂的形状和动画。此外,我只对为精灵的某些部分设置联系人侦听器感兴趣。我想为感兴趣的特定接触区域设置固定装置。当我逐帧更改精灵动画时,如何将身体固定装置保持在正确的位置?
问问题
1541 次
3 回答
1
我不知道这是否是一种正确的方法,但因为它不会产生任何性能问题,所以你可以尝试一下。首先,您必须在保存其最后一个位置后销毁当前的 body 固定装置。
float body_x=Body.getPosition().x;
float body_y=Body.getPosition().y;
Body.destroyFixture(Body.getFixtureList().get(0));
然后你必须像这样为那个身体创建一个新的夹具
Body.createFixture(createFixturePart(
body_x,
body_y,
Width,
Height,
Angle, 1, 1, 0, -1));
这createFixturePart
是我创建身体固定装置的自定义功能。您可以在创建主体时拥有它。对于新夹具,您可以根据需要更改夹具的Width
,height
和Angle
。但是不要为每个渲染周期重新创建fixture,而是仅在动画或整个动画中帧的变化期间更改它。
createFixturePart Method
public FixtureDef createFixturePart(float x, float y, float width,
float height, float angle, int mass, int density, int type,
int groupIndex) {
PolygonShape shape = new PolygonShape();
shape.setAsBox(width, height);
shape.setAsBox(width / 2, height / 2, new Vector2(0, 0),
(float) Math.toRadians(angle));
MassData massData = new MassData();
massData.mass = mass;
bodyDef.position.y = y;
bodyDef.position.x = x;
Body body = worldbox.createBody(bodyDef);
body.setMassData(massData);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = density;
fixtureDef.filter.groupIndex = (short) groupIndex;
fixtureDef.restitution = 10;
return fixtureDef;
}
于 2013-07-16T05:28:58.800 回答
1
无法更改灯具位置。只能再次破坏和创建(但会降低性能)。
取而代之的是,您可以创建 2 个分离的实体,然后使用关节组合在一起。这将是 2 个灯具的相同行为。
于 2013-07-13T18:20:38.113 回答
0
改变灯具位置会破坏它们,并在需要的位置创建新的灯具。但是,我认为,更换车身夹具并不是一个好的解决方案,因为它可能会破坏模拟并降低性能。
于 2013-07-12T19:51:38.057 回答