2017-06-12 16 views
2

我用来创建这样的动画。如何从sprite工作表中选择特定的帧/图像?-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帧。 阿特拉斯文件是这样的:

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 

现在我想要得到这个精灵表的特定帧(第3张)的一些其他use.How我可以得到第三帧只?

还有一件事我想知道,是否可以用这样的精灵表来改变动画的顺序?如果是的话我该怎么做呢?

回答

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

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

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

有一个受保护的方法setKeyFrames(T... keyFrames)所以只有动画的孩子可以使用设置新的/自定义的关键帧。

一些播放模式可供选择像REVERSEDLOOP_PINGPONGLOOP_RANDOM,但都是在除了RANDOM一些秩序。

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

+0

看他的星图文件索引号更改动画的方式你想要的任何时间。 playAtlas.createSprite( “手”,2);返回第2个精灵不是第3个。 – arv

+0

动画 handAnimation;这怎么可能?@Abhishek Aryan – Niranjana

+1

@Niranjana从gdx版本1.9.5开始'动画'类现在是通用的,有[pull request](https://github.com/libgdx/libgdx/pull/4448)for一样。我相信你正在使用一些旧版本。 – Aryan

0

你可以从图册

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); 
相关问题