2016-12-30 53 views
1

我有一些麻烦让我的isAnimationFinished()完成在我正在工作的程序中工作。目前,它似乎只是总是采用这种方法。动画的另一个问题是,它几乎立即穿过所有的精灵,我想延长每个帧约0.25秒左右。我的相关代码如下,任何其他问题或帮助将不胜感激!无法弄清楚如何使用isAnimationFinished()方法(LibGDX)

渲染电话:

public void render(float delta) 
    runTime += delta; 
    world.update(delta); 
    renderer.render(delta, runTime); 

动画创作:

TextureRegion[] waterGraphics = { water1, water2, water3 }; 
waterAnimation = new Animation(0.25f, waterGraphics); 
waterAnimation.setPlayMode(Animation.PlayMode.NORMAL); 

动画绘制:

if(!waterAnimation.isAnimationFinished(runTime)) { 
     //System.out.println("1"); 
     batcher.draw(waterAnimation.getKeyFrame(runTime), penguin.getX()+30, 
       penguin.getY(), penguin.getWidth()/2.0f, 
       penguin.getHeight()/2.0f, penguin.getWidth()*5, penguin.getHeight()*5, 
       1, 1, penguin.getRotation()); // Don't leave at *5..... 
      simpleCounter++; 
     } 

谢谢

回答

0

你可以使用这个动画类,我正在使用我的项目。要检查完成,你可以通过getCurrentFrame()方法检查最后一帧是否运行。

import com.badlogic.gdx.graphics.Texture.TextureFilter; 
import com.badlogic.gdx.graphics.g2d.Sprite; 
import com.badlogic.gdx.graphics.g2d.TextureRegion; 

public class Animation { 

private Sprite[] frames; 
private float time; 
private float delay; 
private int currentframe; 
private int timesplayed; 

public Animation(){} 

public Animation(TextureRegion[] frames){ 
    this(frames, 1/12); 
} 

public Animation(TextureRegion[] frames,float delay){ 
    this.setFrames(frames, delay); 
} 

public Animation(Sprite []a,float delay){ 

    this.frames=a; 
    this.delay=delay; 
    time=0; 
    currentframe=0; 
    timesplayed=0; 
} 

public void setFrames(TextureRegion[] frames,float delay){ 
    this.frames=new Sprite[frames.length]; 
    for(int i=0;i<frames.length;i++){ 
     this.frames[i]=new Sprite(frames[i]); 
     this.frames[i].getTexture().setFilter(TextureFilter.Linear,TextureFilter.Linear); 
    } 

    this.delay=delay; 
    time=0; 
    currentframe=0; 
    timesplayed=0; 

} 

public void update(float dt){ 
    if(delay<=0)return; 
    time+=dt; 
    while(time >= delay)step(); 

} 

private void step() { 
    time-=delay; 
    currentframe++; 
    if(currentframe==frames.length) 
     currentframe=0; 
    timesplayed++; 
} 

public Sprite getFrames() { 
    return frames[currentframe]; 
} 



public float getTime() { 
    return time; 
} 

public void setTime(float time) { 
    this.time = time; 
} 
public float getDelay() { 
    return delay; 
} 


public void setDelay(float delay) { 
    this.delay = delay; 
} 

public int getCurrentframe() { 
    return currentframe; 
} 

public void setCurrentframe(int currentframe) { 
    this.currentframe = currentframe; 
} 

public int getTimesplayed() { 
    return timesplayed; 
} 

public void setTimesplayed(int timesplayed) { 
    this.timesplayed = timesplayed; 
} 


}