2017-06-12 51 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); 
相關問題