如何每次播放一次动画帧?-LibGdx

时间:2017-10-27 12:46:23

标签: java animation libgdx

我在游戏中使用了一个包含6帧的动画作为活动。它有一个固定的顺序。

Array<TextureAtlas.AtlasRegion> anim=new Array<TextureAtlas.AtlasRegion>();
anim =  game.playAtlas.findRegions(RegionNames.FEATHER_ANIMATION);
TextureRegion[] ftr = {anim.get(0),anim.get(1),anim.get(2),anim.get(3),anim.get(4),anim.get(5)};

featherAnimation = new Animation(0.1f,ftr);
featherAnimation.setPlayMode(PlayMode.NORMAL);

我想只运行一次这个动画(这意味着它应该播放第0帧)  当一个特定的布尔值为真时,最后一帧然后应该停止。

播放完最后一帧后,它应该停止并使布尔值为假。

像这样我做了

if (featherBool && egg.isEggAtNest()) {
  featherTexture = featherAnimation.getKeyFrame(animationTime, true);
  batch.draw(featherTexture, egg.getX() - featherTexture.getRegionWidth() / 2, fx.getY());
  featherBool = false;
}

但这并没有达到我的目的。

帧不符合我指定的顺序。 另外,如果动画播放0到5 th 帧,我怎么能停止动画?

3 个答案:

答案 0 :(得分:0)

您是否将animationTime值用于其他动画? 如果是,则应在播放featherAnimation之前将其设置为0。

if (somethingToRunfeatherAnimation) {
   animationTime = 0;
   featherBool = true;
}

此片段也只会运行一次,因为您一次设置featherBool = false

if (featherBool && egg.isEggAtNest()) {
   featherTexture = featherAnimation.getKeyFrame(animationTime, true);
   batch.draw(featherTexture, egg.getX() - featherTexture.getRegionWidth() / 2, fx.getY());
   featherBool = false;
}

像这样使用:

if (featherBool && egg.isEggAtNest() && !featherAnimation.isAnimationFinished(animationTime) {
   featherTexture = featherAnimation.getKeyFrame(animationTime); // deleted looping
   batch.draw(featherTexture, egg.getX() - featherTexture.getRegionWidth() / 2, fx.getY());
}

答案 1 :(得分:0)

以这种方式使用:

if (featherBool) {  
    animationTime+=.01f;
    featherTexture = featherAnimation.getKeyFrame(animationTime);  // <--looping not required so remove second argument
    batch.draw(featherTexture, egg.getX() - featherTexture.getRegionWidth() / 2, fx.getY());
    if(featherAnimation.isAnimationFinished(animationTime))
        featherBool = false;
}

调用showAnimation()方法

private void showAnimation(){

    featherBool=true;
    animationTime=0;
}

答案 2 :(得分:-1)

渲染代码只调用一次

if (featherBool && egg.isEggAtNest()) {
   featherTexture = featherAnimation.getKeyFrame(animationTime, true);
   batch.draw(featherTexture, egg.getX() - featherTexture.getRegionWidth() / 2, fx.getY());
   featherBool = false; ///   The render code is called only once
}

你也必须加快时间。

stateTime += Gdx.graphics.getDeltaTime();

在假冒featherBool值之前,必须放置动画端点

if( yourAnimation.isAnimationFinished( stateTime ) )
        featherBool = false;