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

时间:2015-01-22 17:36:44

标签: animation libgdx texture-atlas

在我的TextureAtlas Sprite我的Animation被旋转了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

修改

就像亚历山大所说的那样,这将有所帮助:

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

2 个答案:

答案 0 :(得分:1)

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

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

我在这里做的事情:我检查地图集包装机是否将区域标记为旋转,然后顺时针旋转90度以补偿原始的90度逆时针旋转。请参阅可以旋转TextureRegion的AtlasRegion's javadoc和特殊版本的draw method

EDITED:根据Markus评论修复参数

答案 1 :(得分:0)

不管怎样,你应该使用AtlasSprite。这在构造函数中执行unrotate。你不想每一帧都旋转 - 这就是一些开销。此外,AtlasSprite应该处理地图集中的修剪区域:这对于最大化单个地图集纹理非常重要。唉它似乎不是很容易使用,因为似乎每个帧需要一个单独的精灵,这似乎是巨大的开销。