当 运行 作为 libGDX 中的动画时,不同大小的纹理区域反弹

Different size texture regions bounce when run as animation in libGDX

我有一个纹理 sheet 是用纹理打包器应用程序创建的,它删除了所有不必要的透明像素以在最终纹理 sheet 中保存 space。问题是我的动画是一个拿着剑的人,所以当他攻击时,他将剑举过头顶,这意味着它会改变精灵的宽度和高度。示例...

characterAttack1 = new TextureRegion(texture, 863, 979, 152, 149);
//more animation frames...
characterAttack8 = new TextureRegion(texture, 1, 2, 340, 256);

如您所见,第一帧是 152x149,但到第 8 帧时它现在是 340x256。 所以当动画 运行s 如果我在我的角色 class 中使用普通的 getWidth() getHeight() 方法,角色会在他攻击时缩小,因为攻击的高度和宽度随着挥剑。另一方面,如果我使用该方法...

((TextureRegion)AssetLoader.characterAttack.getKeyFrame(runTime)).getRegionWidth();
and 
((TextureRegion)AssetLoader.characterAttack.getKeyFrame(runTime)).getRegionHeight();

当攻击动画为 运行 时,角色会在屏幕上弹跳。我知道我不可能是唯一遇到过类似情况的人,但我似乎找不到任何相关信息。我唯一的做法是重新打包纹理文件并使每个纹理文件具有相同的宽度和高度,即使最终打包的纹理中会有大量透明像素吗?

如果您需要查看 AssetLoader 和 batcher.draw 方法或其他任何内容,我非常乐意提供代码示例,我只是想避免 post 太大。谢谢。

除非您打算在 RAM 极低的设备上制作游戏 运行,否则实际上没有必要如此紧密地打包纹理。考虑到事物的宏伟规模,Sprite sheet 确实很小。我想您的游戏在 运行ning 时将需要大约 100MB 的 RAM,考虑到现在大多数计算机都有超过 4GB 的 RAM,还有几 MB 是多少?

角色的 sprite-sheet 应该是任一帧的 最大 大小。例如如果最大的帧是 340x256,则每个帧都需要是那个尺寸。

现在角色每帧都在同一个位置,因为渲染位置不会改变。

如果角色的中心总是在精灵的中间,您可以从图像的中心进行渲染,这将解决您的问题。