gpt4 book ai didi

java - 多个动画的动画偏移

转载 作者:行者123 更新时间:2023-11-30 07:34:34 25 4
gpt4 key购买 nike

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

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

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

这就是我的包/图集文件的样子:

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 中有一个选项可以让我根据最大图像设置偏移量。

最佳答案

经过一个小时的摆弄 SpriterTexturePacker 我找到了一个解决方案。问题的核心在于Spriter。 Spriter 能够根据当前导出的动画中的最大帧导出矩形大小的动画。遗憾的是,它无法对实体的所有动画执行此操作,而他们确实应该添加这些动画。

一个快速解决方法是在导出时创建一个自定义矩形并将其设置得很大,这样您的框架就不会被切断。然后用这个矩形大小导出每个动画。 TexturePackerGUI 可以选择修剪空白,并根据该数字提供偏移量。由于所有原始帧都位于初始矩形/图像内的正确位置,因此解决了问题。我现在有一个紧密包装的 Sprite 表。

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

关于java - 多个动画的动画偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com