翻转不同大小宽度平滑过渡的图像

Flip image with different size width smooth transition

我正在尝试翻转 LibGDX 中的一些动画,但由于它们的宽度不同,所以动画播放起来很奇怪。问题是:

(红点标出X/Y坐标{0,0})

如您所见,当您出拳时动画播放 "left" 时,脚开始时比原来落后很多,但是当您向右出拳时,动画播放正常,因为两个动画的原点都是左角,所以过渡是平滑的。

我认为实现我想要的唯一方法是查看正在播放的动画并相应地调整坐标。

这是代码:

public static float draw(Batch batch, Animation animation, float animationState,
        float delta,
        int posX, int posY, boolean flip) {
    animationState += delta;
    TextureRegion r = animation.getKeyFrame(animationState, true);
    float width = r.getRegionWidth() * SCALE;
    float height = r.getRegionHeight() * SCALE;

    if (flip) {
        batch.draw(r, posX + width, posY, -width, height);
    } else {
        batch.draw(r, posX, posY, width, height);
    }

    return animationState;
}

欢迎就如何解决这个问题提出任何建议。

使用其他一些 batch.draw 选项(带有其他参数)。您可以设置 "origin" 个参数。它就像一个热点......图像的中心......所以如果你即旋转,旋转将围绕该热点完成。

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Batch.html

我没有用它来翻转,但它应该以同样的方式工作。但如果不是,那么你必须自己调整坐标,为每一帧制作一些带有 X 偏移的列表,并将其添加到翻转图像中。

其他解决方案是使用更宽的帧图像并使角色的中心始终与图像的中心匹配。这样你的图像就会比它们必须的更宽——你会有一些空的 space,但对于合理的帧数来说,这是可以接受的。