2016-12-30 131 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; 
} 


}