我有扩展Actor的课程。我的动画是使用stateTime计时器的'act'方法。下面是这个类的片段:
@Override
public void act(float delta) {
super.act(delta);
stateTime += delta;
if(!isDeath) {
...
} else {
if(!animationDead.isAnimationFinished(stateTime)){
textureRegion = animationDead.getKeyFrame(stateTime, true);
}
}
}
animationDead有PLAYMODE.NORMAL
我正在尝试使用'!animationDead.isAnimationFinished(stateTime)',但它在第一帧后停止了我的动画。我想在最后一帧之后停止动画。
我也试图设置stateTime = 0;但同样的,在第一帧之后停止。
当我按下例如SPACE键我的'演员'应该玩战斗动画时,我有同样的情况。但是对于战斗动画的所有帧我必须持有空间键。一个抽头空间是一帧动画。
以下是此方法的片段:
@Override
public void act(float delta) {
super.act(delta);
stateTime += delta;
if(!isAttacking()) {
...
/* Keyboard events */
...
setAttacking(false);
if (Gdx.input.isKeyPressed(Input.Keys.SPACE)) {
setAttacking(true);
if (moveToRight) {
textureRegion = animationAttack.getKeyFrame(stateTime,true);
} else if (!moveToRight) {
isPlayerFlippedToLeft = true;
textureRegion = animationAttack.getKeyFrame(stateTime,true);
}
setPlayerWidthAndHeight();
}
答案 0 :(得分:2)
当您在动画上调用animationDead.getKeyFrame(stateTime, true);
方法时,Animation's
模式会转换为PlayMode.LOOP
或PlayMode.LOOP_REVERSED
,具体取决于当前的动画模式。
PlayMode.NORMAL
- > PlayMode.LOOP
PlayMode.REVERSED
- > PlayMode.LOOP_REVERSED
isAnimationFinished(stateTime)
如果在没有循环播放的情况下完成动画
为什么不拨打animationAttack.getKeyFrame(stateTime);
修改强>
好的,现在你正在使用animationAttack.getKeyFrame(stateTime);
对于三个不同的stateTime
,您正在使用相同的Animation
,当时间显示animationDead
,stateTime
交叉动画frameduration
的动画时,时间isAnimationFinished(stateTime)
返回true,所以
if(!animationDead.isAnimationFinished(stateTime)){ //condition false
textureRegion = animationDead.getKeyFrame(stateTime);
}
最后textureRegion没有死TextureRegion
帧。