Libgdx 将多晶粒子一分为二会产生错误的旋转+;抵消?

Libgdx 将多晶粒子一分为二会产生错误的旋转+;抵消?,libgdx,box2d,Libgdx,Box2d,我试图实现一种类似于水果忍者的分割效果,但必须在用户滑动的地方切割对象。我按照教程进行了操作,并在box2d实体上进行了拆分,但无法正确拆分精灵。所以我想要的是身体有一个精灵,精灵以与身体相同的方式分裂,我使用PolygonSprite,精灵以正确的形状分裂,并与身体同时移动,但是图像中有一个偏移量,而且每次我进行剪切时,它似乎只会剪切原始纹理而不旋转。以下是我得到的: 在我切之前: 第一次切割后(请注意,小三角形不是原始图像的右上角,并且图像未正确居中): 在我剪切小三角形后(注意它是如何

我试图实现一种类似于水果忍者的分割效果,但必须在用户滑动的地方切割对象。我按照教程进行了操作,并在box2d实体上进行了拆分,但无法正确拆分精灵。所以我想要的是身体有一个精灵,精灵以与身体相同的方式分裂,我使用PolygonSprite,精灵以正确的形状分裂,并与身体同时移动,但是图像中有一个偏移量,而且每次我进行剪切时,它似乎只会剪切原始纹理而不旋转。以下是我得到的:

在我切之前:

第一次切割后(请注意,小三角形不是原始图像的右上角,并且图像未正确居中):

在我剪切小三角形后(注意它是如何旋转回来的,没有剪切实际图像):

下面是我拆分对象的方法:

private void createSlice(数组顶点、整数垂直度、Body affectedBody){
Vector2中心=findCentroid(顶点,顶点.大小);
对于(int i=0;i
我的猜测是,我必须将顶点旋转到0度,进行切割,然后将它们旋转回来,但我不确定如何做到这一点

谢谢

private void createSlice(Array<Vector2> vertices, int numVertices, Body affectedBody) {
    Vector2 center = findCentroid(vertices, vertices.size);
    for (int i = 0; i < numVertices; i++) {
        vertices.get(i).sub(center);
    }

    BodyDef sliceBody = new BodyDef();
    sliceBody.position.set(center.x, center.y);
    sliceBody.type = BodyDef.BodyType.DynamicBody;

    PolygonShape slicePoly = new PolygonShape();
    float[] verticesArray = new float[vertices.size * 2];
    int j = 0;
    for (int i = 0; i < verticesArray.length; i+=2) {
        verticesArray[i] = vertices.get(j).x;
        verticesArray[i+1] = vertices.get(j++).y;
    }
    slicePoly.set(verticesArray);

    FixtureDef sliceFixture = new FixtureDef();
    sliceFixture.shape = slicePoly;
    sliceFixture.density = 1;

    Body worldSlice = mWorld.createBody(sliceBody);
    worldSlice.createFixture(sliceFixture);
    for (int i = 0; i < numVertices; i++) {
        vertices.get(i).add(center);
    }

    // create polygon sprite
    float[] scaledVertices = new float[verticesArray.length];
    for (int i = 0; i < verticesArray.length; i++) {
        scaledVertices[i] = verticesArray[i] * Constants.BOX_TO_WORLD;
    }
    short[] triangles = mTriangulator.computeTriangles(scaledVertices).toArray();
    TextureRegion bodyPolyTexReg = ((PolygonSprite) affectedBody.getUserData()).getRegion().getRegion();
    PolygonRegion polyReg = new PolygonRegion(bodyPolyTexReg, scaledVertices, triangles);
    PolygonSprite polySprite = new PolygonSprite(polyReg);
    polySprite.setOrigin(0, 0);

    // set the sprite as the body's user data
    worldSlice.setUserData(polySprite);
}