2013-04-17 3 views
11

In LibGDX Esiste un attore animato (prende un'animazione) e quando viene aggiunto a uno stage si anima o è necessario implementare la propria classe di immagini e animarla autonomamente?LibGDX c'è un attore che è animato?

risposta

9

come solo voi non ho trovato Attore animato così mi sono creato:

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

ho fatto qualcosa di simile. Aspetterò e vedrò se qualcuno può indicare una vera e propria classe di attore, ma se no la contrassegnerò come la risposta. – Lokiare

+0

Grazie mille per il vostro frammento, gentile signore. –

+0

Questo approccio sembra un po 'più lento del tipo "diretto": TextureRegion frame2 = bird_07.getKeyFrame (stateTime, true); stage.getSpriteBatch(). Begin(); stage.getSpriteBatch(). Draw (currentFrame, 1000, 700); qualche idea del perché? – atok

17

ho semplicemente creato un " AnimatedImage "classe di attori che accetta solo un'animazione come argomento (non è necessaria una classe Drawable personalizzata). Penso che questa soluzione sia molto più semplice di quella sopra.

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