Java 多个动画的动画偏移

Java 多个动画的动画偏移,java,animation,libgdx,sprite-sheet,texturepacker,Java,Animation,Libgdx,Sprite Sheet,Texturepacker,我正在使用TexturepackgerGUI将多个动画打包到一个精灵表中。我使用spritter生成这些动画TexturepackerGUI附带了一个方便的功能,可以输出一个可用于偏移动画的偏移字段,以便精灵在变大时不会从左向右移动 但是多个动画呢?当我从“行走”动画移动到“空闲”或“运行”时,它仍然会移动位置,因为这些帧使用了更大的精灵,因为我在精灵中移动和旋转了更多的零件 解决此问题的一种方法是在sprite中输出一个固定大小,但这将浪费大量纹理空间,因为我必须使用最大sprite的矩形大小

我正在使用
TexturepackgerGUI
将多个动画打包到一个精灵表中。我使用
spritter
生成这些动画
TexturepackerGUI
附带了一个方便的功能,可以输出一个可用于偏移动画的偏移字段,以便精灵在变大时不会从左向右移动

但是多个动画呢?当我从“行走”动画移动到“空闲”或“运行”时,它仍然会移动位置,因为这些帧使用了更大的精灵,因为我在
精灵中移动和旋转了更多的零件

解决此问题的一种方法是在
sprite
中输出一个固定大小,但这将浪费大量纹理空间,因为我必须使用最大sprite的矩形大小

以下是我的pack/atlas文件的外观:

idle_cycle_heavy
  rotate: false
  xy: 1602, 2
  size: 78, 95
  orig: 124, 121
  offset: 3, 20
  index: 20
idle_cycle_heavy
  rotate: false
  xy: 1682, 2
  size: 78, 95
  orig: 124, 121
  offset: 3, 20
  index: 21
//...
run_cycle_heavy
  rotate: false
  xy: 162, 507
  size: 78, 95
  orig: 116, 113
  offset: 22, 11
  index: 25
run_cycle_heavy
  rotate: false
  xy: 1636, 406
  size: 78, 97
  orig: 116, 113
  offset: 23, 13
  index: 18
//...
这里我用偏移量来画图

public void draw(SpriteBatch batch) {
    TextureRegion currentFrame = getCurrentFrame();
    if (currentFrame == null) Gdx.app.log("Unit.java", "Could not find proper frame.");

    int posX = Math.round(((TextureAtlas.AtlasRegion) currentFrame).offsetX);
    int posY = Math.round(((TextureAtlas.AtlasRegion) currentFrame).offsetY);

    batch.draw(currentFrame, posX, posY);
}

/**
 * Gets the texture region of the current frame taking the unit state into account
 * @return the current TextureRegion
 */
private TextureRegion getCurrentFrame()
{
    frameTime += Gdx.graphics.getDeltaTime();

    if (unitState.equals(UnitState.Idle))
    {
        return idleAnimation.getKeyFrame(frameTime);
    }
    else if (unitState.equals(UnitState.Walking))
    {
        return walkAnimation.getKeyFrame(frameTime);
    }
    else if (unitState.equals(UnitState.Running))
    {
        return runAnimation.getKeyFrame(frameTime);
    }
    else if (unitState.equals(UnitState.Shooting))
    {
        return shootAnimation.getKeyFrame(frameTime);
    }
    return null;
}

我有点希望在
TexturePackerGui
中有一个选项,允许我根据最大的图像设置偏移量。

在又一个小时摆弄
Spriter
TexturePacker
之后,我找到了一个解决方案。问题的核心在于
spritter
。Spriter能够基于当前导出动画中的最大帧导出矩形大小的动画。遗憾的是,它不能为一个实体的所有动画都这样做,他们真的应该添加这些动画

一个快速修复方法是在导出时创建一个自定义矩形,并将其变大,这样您的帧就不会被截断。然后以该矩形大小导出每个动画
TexturePackerGUI
具有修剪空白的选项,并基于该数字提供偏移量。由于所有原始帧都位于初始矩形/图像的正确位置,因此解决了该问题。我现在有一张包装紧密的雪碧纸

我真的很想看到
spritter
的一个功能,它实际上可以自动完成这项工作。它在当前导出的动画上提供了此选项,但对于任何想要导出/创建多个动画的人来说,这都是无用的。
spritter
提供的另一个选项是设置
动画导出框大小
,在这里您可以将其克隆到所有其他实体/动画。这里的问题是,大多数情况下,你不知道最大的帧是什么,必须查找具有最大精灵的帧,否则较大的帧将被切断。这就是为什么我只是将帧导出为512x512图像,以确保它们都适合。如果您保留图像,这会浪费大量空间,但它们可以被删除,并且在需要时可以轻松生成