Animation 逐帧更新动画的box2d装置位置

Animation 逐帧更新动画的box2d装置位置,animation,cocos2d-iphone,box2d,box2d-iphone,Animation,Cocos2d Iphone,Box2d,Box2d Iphone,我在游戏中使用的精灵具有复杂的形状和动画。另外,我只对设置sprite某些部分的联系人侦听器感兴趣。我想为感兴趣的特定接触区域设置固定装置。在逐帧更改精灵动画时,如何在正确位置移动身体固定装置?更改固定装置位置将其销毁,并在所需位置创建新固定装置。但是,我认为,更改车身固定装置不是一个好的解决方案,因为它可能会破坏模拟并降低性能。不可能更改固定装置的位置。只会再次破坏和创建(但会降低性能) 相反,您可以创建两个分离的实体,然后使用关节将它们组合在一起。这将是两个装置的相同行为。我不知道这是否是一

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

更改固定装置位置将其销毁,并在所需位置创建新固定装置。但是,我认为,更改车身固定装置不是一个好的解决方案,因为它可能会破坏模拟并降低性能。

不可能更改固定装置的位置。只会再次破坏和创建(但会降低性能)


相反,您可以创建两个分离的实体,然后使用关节将它们组合在一起。这将是两个装置的相同行为。

我不知道这是否是一个正确的方法,但它不会产生任何性能问题,所以您可以尝试一下。 首先,在保存实体的最后一个位置后,必须销毁其当前固定装置

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
是我的定制函数,用于创建实体的夹具。您可以在创建实体时使用它。对于新夹具,您可以根据需要更改夹具的
宽度
高度
角度
。但不要为每个渲染周期重新创建设备,而应仅在动画或整个动画中的帧更改期间更改设备

createFixturePart方法

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;
    }

我不能移动夹具位置以使其与动画同步,而不销毁和重新创建它们吗?这就是我想要实现的。@IMustCode,不,box2d不提供这样的接口。比销毁和重新创建更好的是让它们都存在,并在不活动的部分禁用冲突。将不活动的传感器更改为传感器时,性能密集度要低得多。还允许检查是否有足够的空间站立等等。@JagdeepSingh:如何确保计时与动画帧更改的计时同步?另外,如果您能提供
createFixturePart
的定义,我将不胜感激。