0

我在游戏中使用的精灵具有复杂的形状和动画。此外,我只对为精灵的某些部分设置联系人侦听器感兴趣。我想为感兴趣的特定接触区域设置固定装置。当我逐帧更改精灵动画时,如何将身体固定装置保持在正确的位置?

4

3 回答 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,heightAngle。但是不要为每个渲染周期重新创建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 回答