0

在我TextureAtlasSprite's for myAnimation中旋转了 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);

动画效果非常好,但它像精灵表中一样旋转了 90 度。

我意识到,如果我有一个Sprite我可以打电话Sprite.draw(batch),它会修复轮换,但我似乎无法使用那个机制来Animation's?

编辑:

就像亚历山大说的那样,这会成功:

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

2 回答 2

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

我在这里做什么:我检查 atlas packer 是否将该区域标记为已旋转,然后将其绘制为顺时针旋转 90 角以补偿原始的 90 角逆时针旋转。请参阅AtlasRegion 的 javadoc和可以旋转 TextureRegion的draw 方法的特殊版本。

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

于 2015-01-22T18:19:14.337 回答
0

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

于 2015-09-21T16:27:02.020 回答