我在游戏中使用的精灵有复杂的形状和动画。另外,我只对为精灵的某些部分设置联系人监听器感兴趣。我想为感兴趣的特定接触区域设置灯具。当我逐帧更改精灵动画时,如何将身体固定装置保持在正确的位置?
答案 0 :(得分:1)
无法更改灯具位置。只会再次摧毁和创造(但会降低性能)。
而不是它,您可以创建2个分离的实体,然后使用关节一起使用。这将是2个灯具的相同行为。
答案 1 :(得分:1)
我不知道这是否是一种正确的方法,但因为它没有任何性能问题,所以你可以尝试一下。 首先,你必须在保存其最后位置后销毁身体的当前夹具。
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
。但是不要为每个渲染周期重新创建夹具,而是仅在动画或整个动画中的帧更改期间更改它。
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;
}
答案 2 :(得分:0)
更改固定装置的位置,并在需要的位置创建新的固定装置。但是,我认为,改变身体固定装置并不是一个好方法,因为它可能会破坏模拟并降低性能。