我在游戏中使用了一个包含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 帧,我怎么能停止动画?
答案 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;