libGDX - TextureRegion 在缩放时绘制怪异
libGDX - TextureRegion drawing weird when scaled
有一个奇怪的问题。
我有一个包含四帧精灵动画的纹理。每个帧都作为 TextureRegion 加载。
大部分时间 Animation 播放没有任何问题,但偶尔会在一帧中绘制过多的 Texture。
这是我的意思的一个例子:
如您所见,UFO 的左侧有一个红色条。该红色条是我的代码中规定的 TextureRegion 边界外部框架的一部分。 (红框只是为了方便我测量,因为所有的角都是透明的)
这是纹理:
在上面的精灵中 sheet 顶部幻灯片的红色框的边界为 0、0、202、71。动画框的 TextureRegion 为 1、1、200、69 -- 据我所知,任何时候都不应该显示任何红框。
我意识到作为一种解决方法,我现在可以将框架设置为透明,因为我已经有了我需要的测量值,但我想保留红色框架以备日后需要再次进行测量时使用,或者更换精灵图像等,实际上解决方法只是一个创可贴,而我希望找到一个合适的解决方案来解决问题的根源——它绘制错误的事实似乎表明一个比现有问题更大的问题只是在这种特殊情况下(例如,在密集包装的纹理中,它可能会从不同的精灵帧甚至不同的精灵或菜单图像或类似的东西中绘制像素)。
哦,还有最后一点,以防有用:当 SpriteBatch 显示图像时,它会根据 UFO 的移动应用旋转(向左移动时向左倾斜等)。有故障的红色条有时会随机出现在顶部、右侧、底部或左侧(尽管大多数时候它们根本不会出现)但是它们似乎只在 UFO 的旋转为零时才会出现。 (同样,我意识到我可以只包括一个检查以查看旋转是否为 0,然后在没有旋转数字的情况下调用 SpriteBatch.draw() 方法,但这也是治疗症状而不是解决问题的根源).
博学的大师们有什么想法吗?
您的动画帧周围需要填充以解决舍入误差。在每个图像周围放置两个像素的清晰像素。如果您使用TexturePacker将图像合并到您的文件中,它会默认自动添加两个像素的padding。
如果您使用下划线帧编号后缀命名您的四张图片,例如 myAnimation_0.png、myAnimation_1.png、myAnimation_2.png 和 myAnimation_3.png,那么当您加载TextureAtlas,让你轻松搞定动画
Array<TextureRegion> myAnimationFrames = textureAtlas.findRegions("myAnimation");
有一个奇怪的问题。
我有一个包含四帧精灵动画的纹理。每个帧都作为 TextureRegion 加载。
大部分时间 Animation 播放没有任何问题,但偶尔会在一帧中绘制过多的 Texture。
这是我的意思的一个例子:
如您所见,UFO 的左侧有一个红色条。该红色条是我的代码中规定的 TextureRegion 边界外部框架的一部分。 (红框只是为了方便我测量,因为所有的角都是透明的)
这是纹理:
在上面的精灵中 sheet 顶部幻灯片的红色框的边界为 0、0、202、71。动画框的 TextureRegion 为 1、1、200、69 -- 据我所知,任何时候都不应该显示任何红框。
我意识到作为一种解决方法,我现在可以将框架设置为透明,因为我已经有了我需要的测量值,但我想保留红色框架以备日后需要再次进行测量时使用,或者更换精灵图像等,实际上解决方法只是一个创可贴,而我希望找到一个合适的解决方案来解决问题的根源——它绘制错误的事实似乎表明一个比现有问题更大的问题只是在这种特殊情况下(例如,在密集包装的纹理中,它可能会从不同的精灵帧甚至不同的精灵或菜单图像或类似的东西中绘制像素)。
哦,还有最后一点,以防有用:当 SpriteBatch 显示图像时,它会根据 UFO 的移动应用旋转(向左移动时向左倾斜等)。有故障的红色条有时会随机出现在顶部、右侧、底部或左侧(尽管大多数时候它们根本不会出现)但是它们似乎只在 UFO 的旋转为零时才会出现。 (同样,我意识到我可以只包括一个检查以查看旋转是否为 0,然后在没有旋转数字的情况下调用 SpriteBatch.draw() 方法,但这也是治疗症状而不是解决问题的根源).
博学的大师们有什么想法吗?
您的动画帧周围需要填充以解决舍入误差。在每个图像周围放置两个像素的清晰像素。如果您使用TexturePacker将图像合并到您的文件中,它会默认自动添加两个像素的padding。
如果您使用下划线帧编号后缀命名您的四张图片,例如 myAnimation_0.png、myAnimation_1.png、myAnimation_2.png 和 myAnimation_3.png,那么当您加载TextureAtlas,让你轻松搞定动画
Array<TextureRegion> myAnimationFrames = textureAtlas.findRegions("myAnimation");