Libgdx TextureAtlas.findRegions()如何查找动画的所有部分?

Libgdx TextureAtlas.findRegions()如何查找动画的所有部分?,libgdx,Libgdx,我正在尝试从图集加载一组帧以制作动画。使用TexturePacker打包图像后,我的atlas文件如下所示: ufo_data2.png size: 2048,2048 format: RGBA8888 filter: Nearest,Nearest repeat: none Ufo_gfx/red/ufo_0_red0000 rotate: false xy: 2, 1030 size: 512, 512 orig: 512, 512 offset: 0, 0 inde

我正在尝试从图集加载一组帧以制作动画。使用TexturePacker打包图像后,我的atlas文件如下所示:

ufo_data2.png
size: 2048,2048
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Ufo_gfx/red/ufo_0_red0000
  rotate: false
  xy: 2, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0001
  rotate: false
  xy: 2, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0002
  rotate: false
  xy: 516, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0003
  rotate: false
  xy: 2, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0004
  rotate: false
  xy: 516, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0005
  rotate: false
  xy: 1030, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0006
  rotate: false
  xy: 516, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
TextureAtlas atlas;
atlas = new TextureAtlas(Gdx.files.internal("data/gfx/ufo_data.atlas"));
ufo_animation = new Animation<TextureRegion>(0.033f, atlas.findRegions("Ufo_gfx/red/"));
我试图像这样加载动画:

ufo_data2.png
size: 2048,2048
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Ufo_gfx/red/ufo_0_red0000
  rotate: false
  xy: 2, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0001
  rotate: false
  xy: 2, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0002
  rotate: false
  xy: 516, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0003
  rotate: false
  xy: 2, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0004
  rotate: false
  xy: 516, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0005
  rotate: false
  xy: 1030, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
Ufo_gfx/red/ufo_0_red0006
  rotate: false
  xy: 516, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: -1
TextureAtlas atlas;
atlas = new TextureAtlas(Gdx.files.internal("data/gfx/ufo_data.atlas"));
ufo_animation = new Animation<TextureRegion>(0.033f, atlas.findRegions("Ufo_gfx/red/"));
TextureAtlas图集;
atlas=新的TextureAtlas(Gdx.files.internal(“data/gfx/ufo_data.atlas”);
ufo_动画=新动画(0.033f,atlas.findRegions(“ufo_gfx/red/”));
我发现
atlas.findRegions(“Ufo_gfx/red/”)
甚至
atlas.findRegions(“Ufo_gfx/red/*”)
总是返回0个结果

我原以为使用一个类似正则表达式的表达式就足以加载所有帧,但在查看findRegions()代码之后,我发现只有当匹配项正好是输入的字符串时才会返回

如果按照TexturePacker的工作方式思考,FindRegions()似乎毫无用处

我的问题是:有没有一种方法可以放置一个字符串来匹配具有相似名称的图像的所有名称? 注意:我发现解决方案如下:

需要将图像与名称、下划线和索引放在一起,比如a_00.png a_01.png
然后,纹理打包器用索引打包图像。

您可以创建一个助手函数,该函数调用
getRegion()
,迭代所有区域,并检查它们的
名称.startsWith(“Ufo\u gfx/red/”)
。将所有这些放在一个集合中,并从helper函数返回它们。

您可以创建一个helper函数,该函数调用
getRegion()
,迭代所有区域,并检查它们的
name.startsWith(“Ufo\u gfx/red/”
)。将所有这些放在一个集合中,并从助手函数返回它们。

这很简单:

  • 您的所有地区都应具有相同的名称
  • 您应该在从-1开始的所有区域上重写
    索引:-1
    ,以从1开始计数
它应该是什么样子的:

ufo_data2.png
size: 2048,2048
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 2, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 1
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 2, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 2
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 516, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 3
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 2, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 4
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 516, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 5
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 1030, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 6
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 516, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 7
现在,您可以使用以下方法创建阵列:

atlas.findRegions("Ufo_gfx/red/ufo_0_red");
这很简单:

  • 您的所有地区都应具有相同的名称
  • 您应该在从-1开始的所有区域上重写
    索引:-1
    ,以从1开始计数
它应该是什么样子的:

ufo_data2.png
size: 2048,2048
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 2, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 1
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 2, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 2
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 516, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 3
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 2, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 4
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 516, 516
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 5
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 1030, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 6
Ufo_gfx/red/ufo_0_red
  rotate: false
  xy: 516, 2
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 7
现在,您可以使用以下方法创建阵列:

atlas.findRegions("Ufo_gfx/red/ufo_0_red");
我找到的解决办法是

需要将文件重命名为imagename_00.png、imagename_01.png、imagename_02.png。 当图像打包时,系统将xx理解为索引,并自动将索引放入atlas文件中

然后您只需要调用findRegions(imagename)

我找到的解决方案是

需要将文件重命名为imagename_00.png、imagename_01.png、imagename_02.png。 当图像打包时,系统将xx理解为索引,并自动将索引放入atlas文件中


然后您只需要调用findRegions(imagename)

所有区域的名称必须是:

ufo_0_red_0001
  rotate: false
  xy: 2, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 1
ufo_0_red_0002
  rotate: false
  xy: 2, 516
  size: 512, 512
  .........

所有地区名称必须为:

ufo_0_red_0001
  rotate: false
  xy: 2, 1030
  size: 512, 512
  orig: 512, 512
  offset: 0, 0
  index: 1
ufo_0_red_0002
  rotate: false
  xy: 2, 516
  size: 512, 512
  .........

就像你解释的,但是有一种自动的方法:@Killrazor TexturePacker在添加到TexturePacker之前,如果你将它们加载到文件夹中,它会自动执行。正如我有时间测试的,如果你没有以正确的格式输入名称,它不会执行。@Killrazor你的图像应该以_N结尾。其中N是索引。正如你解释的,但有一种自动方式可以做到这一点:@Killrazor TexturePacker会自动执行此操作,如果您在添加到TexturePacker之前将它们加载到文件夹中。正如我有时间测试的那样,如果您没有以正确的格式输入名称,则不会执行此操作。@Killrazor您的图像应该以_N结尾。其中N是索引。