在我的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);
答案 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应该处理地图集中的修剪区域:这对于最大化单个地图集纹理非常重要。唉它似乎不是很容易使用,因为似乎每个帧需要一个单独的精灵,这似乎是巨大的开销。