libGDX - 在缩放时,TextureRegion绘图很奇怪

时间:2015-02-15 03:37:31

标签: java libgdx drawing textures texture-packing

有一个奇怪的问题。

我有一个带有四个精灵动画帧的纹理。每个帧都作为TextureRegion加载。

大部分时间动画都没有任何问题,但偶尔会在一帧中绘制过多的纹理。

这是我的意思的一个例子:

enter image description here

正如你所看到的,UFO的左侧有一个红色条。该红色条是我的代码中所述的TextureRegion边界外部框架的一部分。 (红色框架就是为了让我更容易测量,因为所有角落都有透明度)

这是纹理:

enter image description here

在上面的精灵表中,顶部幻灯片的红框有0,0,202,71的边界。动画框架的TextureRegion为1,1,200,69 - 任何时候都不应该据我所知,任何红框都会显示出来。

我意识到作为一种解决方法,我可以将帧设置为透明,因为我有我需要的测量值,但我想保留红色帧以防我需要稍后再次进行测量,或者替换精灵图像等等,真正的解决方法只是一个创可贴,而我希望找到一个合适的解决方案来解决问题的根源 - 这个错误的事实似乎表明一个更大的问题,而不是仅仅存在这种特殊情况(例如,在密集的纹理中,它可能会从不同的精灵帧或甚至不同的精灵或菜单图像或类似的东西中绘制像素)。

哦,还有最后一点,如果它有用:当SpriteBatch显示图像时,它根据UFO的移动应用旋转(向左移动时向左倾斜等)。毛躁的红色条有时会随机显示在顶部,右侧,底部或左侧(尽管大部分时间它们根本不显示)但是当UFO旋转为零时它们似乎只显示出来。 (再次,我意识到我可以只包括一个检查以查看旋转是否为0,然后调用SpriteBatch.draw()方法而没有旋转图,但这也将处理症状而不是解决问题的根源)。

来自学识渊博的大师的任何想法?

1 个答案:

答案 0 :(得分:1)

您的动画帧需要在它们周围填充以解决舍入错误。在每个图像周围放置两个清晰像素的像素。如果您使用TexturePacker将图像组合到文件中,默认情况下它会自动添加两个填充像素。

如果您使用下划线帧编号后缀命名四个图像,例如myAnimation_0.png,myAnimation_1.png,myAnimation_2.png和myAnimation_3.png,那么当您加载TextureAtlas时,它可以让您轻松获得动画

Array<TextureRegion> myAnimationFrames = textureAtlas.findRegions("myAnimation");