如何从精灵表中选择特定的帧/图像?-LibGdx

时间:2017-06-12 08:31:45

标签: java libgdx

我曾经像这样制作动画。

private Animation handAnimation;    

handAnimation=new Animation(0.25f, playAtlas.createSprites(RegionNames.HAND_ANIMATION),Animation.PlayMode.LOOP);

这样画:

handTexture = handAnimation.getKeyFrame(animationTime, true);
batch.draw(handTexture, Constants.WORLD_WIDTH - (2 * handTexture.getRegionWidth()),Constants.WORLD_HEIGHT / 4);

此动画有4帧。 Atlas文件看起来像这样:

hand.png
format: RGBA8888
filter: Nearest,Nearest
repeat: none
hand
  rotate: false
  xy: 1, 1
  size: 102, 152
  orig: 102, 152
  offset: 0, 0
  index: 1
hand
  rotate: false
  xy: 105, 1
  size: 102, 152
  orig: 102, 152
  offset: 0, 0
  index: 2
hand
  rotate: false
  xy: 209, 1
  size: 102, 152
  orig: 102, 152
  offset: 0, 0
  index: 3
hand
  rotate: false
  xy: 313, 1
  size: 102, 152
  orig: 102, 152
  offset: 0, 0
  index: 4

现在我想获得这个精灵表的特定帧(第三帧)以供其他用途。我如何才能获得第三帧?

我想知道的另一件事是,是否可以使用这样的精灵表更改动画的顺序?如果是这样,我该怎么办?

2 个答案:

答案 0 :(得分:0)

你可以从atlas

获得特定的精灵
    createSprite(java.lang.String name, int index)
//Returns the first region found with the specified name and index as a sprite.

在第三个精灵的代码中:

playAtlas.createSprite("hand",3);

对于反向动画,试试这个:

handAnimation=new Animation(0.25f, playAtlas.createSprites(RegionNames.HAND_ANIMATION),Animation.PlayMode.LOOP_REVERSED);

答案 1 :(得分:0)

不要使用playAtlas.createSprites("hand")

对于您的情况,这将创建4个Spirtes并返回ArraySprite包含大量您不需要的数据,因此只会浪费内存。

因此请使用playAtlas.findRegions("hand")代替playAtlas.createSprites("hand")

handAnimation=new Animation(0.25f,playAtlas.findRegions("hand"), Animation.PlayMode.LOOP);

Animation现在是通用的,所以以这种方式声明:

Animation<TextureRegion> handAnimation;
TextureRegion handTextureRegion;

handTextureRegion = handAnimation.getKeyFrame(animationTime, true);
  1. 您需要第3帧作为SpriteTextureRegion

    如果Sprite使用playAtlas.createSprite("hand",3);或使用TextureRegion作为playAtlas.findRegions("hand").get(2);

  2. 是的,您可以更改动画的顺序,但在动画对象初始化之前。 TextureAtlas的findRegions()返回一个Array,使用该Array的元素并根据自己的自定义顺序创建自己的Array并传递新的自定义 数组作为动画构造函数中的参数。

  3. 有一个受保护的方法setKeyFrames(T... keyFrames),因此动画的子项只能用于设置新的/自定义KeyFrame。

    有些播放模式可供选择,例如REVERSEDLOOP_PINGPONGLOOP_RANDOM,但除了RANDOM外,所有播放模式都按顺序排列。

    您可以随时通过animation.setPlayMode(PlayMode playMode);

    更改动画模式