0

有一个奇怪的问题。

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

大多数时候动画播放没有任何问题,但偶尔它会在一帧中绘制过多的纹理。

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

在此处输入图像描述

如您所见,不明飞行物的左侧有一个红色条。该红色条是我的代码中所述的 TextureRegion 边界外部框架的一部分。(红框只是为了让我更容易测量,因为所有角落都是透明的)

这是纹理:

在此处输入图像描述

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

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

哦,最后一点,以防万一:当 SpriteBatch 显示图像时,它会根据 UFO 的移动应用旋转(向左移动时向左倾斜等)。有故障的红色条有时会随机出现在顶部、右侧、底部或左侧(尽管大多数情况下它们根本不会出现),但它们似乎只在 UFO 旋转为零时出现。(再次,我意识到我可以只检查旋转是否为 0,然后在没有旋转图的情况下调用 SpriteBatch.draw() 方法,但这也是治疗症状而不是解决问题的根源)。

有学问的大师有什么想法吗?

4

1 回答 1

1

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

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

Array<TextureRegion> myAnimationFrames = textureAtlas.findRegions("myAnimation");
于 2015-02-15T14:30:26.923 回答