【问题标题】:Can't figure out how to use isAnimationFinished() method (LibGDX)无法弄清楚如何使用 isAnimationFinished() 方法(LibGDX)
【发布时间】:2016-12-30 19:23:44
【问题描述】:

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

渲染调用:

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++;
        }

谢谢

【问题讨论】:

    标签: java animation libgdx


    【解决方案1】:

    您可以使用我在项目中使用的这个动画类。要检查是否完成,您可以通过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;
    }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-18
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      相关资源
      最近更新 更多