簡體   English   中英

如何從精靈表中選擇特定的幀/圖像?-LibGdx

[英]How to choose a particular frame/image from sprite sheet?-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

現在我想獲得此精靈表的特定幀(第三幀)以用於其他用途,如何才能僅獲得第三幀?

我想知道的一件事,是否可以用這樣的精靈表更改動畫的順序?如果可以,該怎么辦?

您可以從地圖集中獲取特定的精靈

    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);

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

對於您的情況,這將創建4個Spirtes並返回Array Sprite擁有許多您不需要的數據,因此僅浪費內存。

因此請使用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. 是的,您可以更改動畫的順序,但是要在Animation對象初始化之前。 findRegions()返回一個Array,使用該Array的元素並根據自己的自定義順序創建自己的Array,並將新自定義的Array作為參數傳遞給Animation構造函數。

有一個受保護的方法setKeyFrames(T... keyFrames)因此只有Animation的子級才能使用來設置新的/自定義的KeyFrame。

某些播放模式可用,例如REVERSEDLOOP_PINGPONGLOOP_RANDOM ,但是除了RANDOM以外,所有播放模式都以某種順序排列。

您可以隨時通過animation.setPlayMode(PlayMode playMode);更改animation.setPlayMode(PlayMode playMode);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM