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图像,以确保它们都适合。如果您保留图像,这会浪费大量空间,但它们可以被删除,并且在需要时可以轻松生成