Libgdx 使用 TextureAtlas 图像的动画旋转不正确

Libgdx Animation using images from TextureAtlas gets incorrectly rotated

在我的 TextureAtlas 中,我的 AnimationSprite 旋转了 90 度。

当我画 Animation 时,它仍然旋转了 90 度。我该如何解决?

我的代码是这样的:

    TextureAtlas spritesheet = new TextureAtlas(Gdx.files.internal("images/spritesheet/spritesheet.atlas"));
    Array<AtlasRegion> CLOUD_ANIMATION_REGIONS = spritesheet.findRegions("cloud_animation");
    Animation animation = new Animation(0.1f,ImageProvider.CLOUD_ANIMATION_REGIONS);

在渲染方法中:

    batch.draw(animation.getKeyFrame(elapsedTime, true), x, y);

动画效果非常好,但像在 spritesheet 中一样旋转了 90 度。

我意识到,如果我有一个 Sprite,我可以调用 Sprite.draw(batch),它会修复旋转,但我似乎无法将该机制用于 Animation的?

编辑:

正如 Alexander 所说,这可以解决问题:

batch.draw(textureRegion, x, y, 0, 0,textureRegion.getRegionWidth(), textureRegion.getRegionHeight(), 1, 1, 90);

好的,这是未经测试的代码:

TextureRegion textureRegion = animation.getKeyFrame(elapsedTime, true);
if (textureRegion instanceof TextureAtlas.AtlasRegion && ((TextureAtlas.AtlasRegion) textureRegion).rotate)
{
    batch.draw(textureRegion, x, y, 0, 0, textureRegion.getRegionWidth(), textureRegion.getRegionHeight(), 1, 1, 90, true);
}
else
{
    batch.draw(textureRegion, x, y);
}

我在这里做什么:我检查 atlas packer 是否将该区域标记为旋转,然后将其绘制为顺时针旋转 90 度以补偿原始逆时针旋转 90 度。看到可以旋转TextureRegion的AtlasRegion's javadoc and special version of draw method

已编辑:根据 Markus 评论修复参数

我认为您应该以某种方式使用 AtlasSprite。这在其构造函数中执行了 unrotate。你不想旋转每一帧——那是一些开销。 AtlasSprite 还应该处理图集中的修剪区域:这对于最大化单个图集纹理非常重要。唉,它似乎不太容易使用,因为它似乎需要为每一帧单独的精灵,这似乎是巨大的开销。