2013-04-17 11 views

答えて

9

はちょうど私がアニメーション俳優を見つけられませんでした好きなので、私は自分自身を作成し​​ました:

AnimatedActor.java:

public class AnimatedActor extends Image 
{ 
    private final AnimationDrawable drawable; 

    public AnimatedActor(AnimationDrawable drawable) 
    { 
     super(drawable); 
     this.drawable = drawable; 
    } 

    @Override 
    public void act(float delta) 
    { 
     drawable.act(delta); 
     super.act(delta); 
    } 
} 

AnimationDrawable.java:私は単に "作成

class AnimationDrawable extends BaseDrawable 
{ 
    public final Animation anim;  
    private float stateTime = 0; 

    public AnimationDrawable(Animation anim) 
    { 
     this.anim = anim; 
     setMinWidth(anim.getKeyFrameAt(0).getRegionWidth()); 
     setMinHeight(anim.getKeyFrameAt(0).getRegionHeight()); 
    } 

    public void act(float delta) 
    { 
     stateTime += delta; 
    } 

    public void reset() 
    { 
     stateTime = 0; 
    } 

    @Override 
    public void draw(SpriteBatch batch, float x, float y, float width, float height) 
    { 
     batch.draw(anim.getKeyFrame(stateTime), x, y, width, height); 
    } 
} 
+0

私は似た何かをしました。私は誰かが実際のActorクラスを指摘できるかどうかを待っていますが、そうでない場合はこれを答えとしてマークします。 – Lokiare

+0

あなたのスニペット、ありがとうございました。 –

+0

これはちょっと「遅い」アプローチです:TextureRegion frame2 = bird_07.getKeyFrame(stateTime、true); stage.getSpriteBatch()。begin(); stage.getSpriteBatch()。draw(currentFrame、1000、700);どんな考え? – atok

17

AnimatedImage "引数としてアニメーションだけを取るアクタクラス(カスタムDrawableクラスは不要)。私は、このソリューションは上記のものよりずっと簡単だと思います。

AnimatedImage.java:

public class AnimatedImage extends Image 
{ 
    protected Animation animation = null; 
    private float stateTime = 0; 

    public AnimatedImage(Animation animation) { 
     super(animation.getKeyFrame(0)); 
     this.animation = animation; 
    } 

    @Override 
    public void act(float delta) 
    { 
     ((TextureRegionDrawable)getDrawable()).setRegion(animation.getKeyFrame(stateTime+=delta, true)); 
     super.act(delta); 
    } 
} 
関連する問題