【问题标题】:Flip image with different size width smooth transition翻转不同大小宽度的图像平滑过渡
【发布时间】:2016-04-20 06:38:23
【问题描述】:

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

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

如您所见,当您出拳时动画播放“左”时,脚开始的位置比原来要落后,但是当您右拳时,动画播放正常,因为两个动画的原点都是左角,所以过渡很顺利。

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

这是代码:

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

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

【问题讨论】:

    标签: animation libgdx sprite draw


    【解决方案1】:

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

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

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

    其他解决方案是使用更宽的帧图像并保持角色的中心始终与图像的中心匹配。这样一来,您的图像将比它们必须的更宽 - 您将有一些空白空间,但对于合理的帧数是可以接受的。

    【讨论】:

    • 谢谢。我尝试设置 originX 但我无法让它很好地工作。我使用静态宽度(角色空闲时的宽度)并尝试将其他精灵调整到它的中心得到了一些结果,但是有些动画渲染正常,而另一些则偏离中心。我将尝试将所有精灵设置为与您所说的相同的宽度,但总共有 65 个。
    • 你试过设置 originX 和 originY 吧?不确定它是否可以仅设置一个值...
    • 是的。正如您在这里看到的link 脚,这就是让您感觉图像之间的过渡总是从帧到帧的中心偏离的原因,并且没有办法仅用一个值将其居中。我尝试了几种不同的方法(甚至使所有帧的宽度/大小都相同),当我修复一个动画时,其他动画会因此而损坏。我认为更好的解决方案是手动对每一帧进行偏移,这不是我喜欢做的事情:(
    • 我用 LibGDX 附带的纹理包打包了纹理,并尝试在 .pack 文件中手动设置偏移量,但它似乎没有改变任何东西。我想我会为此使用另一个我熟悉的打包程序,但这很遗憾,因为动画和纹理区域类非常易于使用。
    • 如果您有支持偏移量的打包程序,那就太好了。甚至不知道它的存在。但如果不是,您必须自己测量热点偏移(通过 Photoshop 或其他工具),然后为每一帧制作某种带有偏移对的数组,在渲染帧时添加这些数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多