2016-12-30 8 views
1

私が取り組んでいるプログラムで私のisAnimationFinished()が正常に動作するようになっています。現在のところ、このメソッドにはいつも入っているようです。アニメーションのもう1つの問題は、約2.5秒間、各フレームを延長したいすべてのスプライトをほぼ即座に通過することです。私の関連するコードは以下の通りですが、他の質問や助けをいただければ幸いです!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; 
} 


} 
関連する問題