2013-04-17 15 views
11

LibGDX'te Animasyonlu (Animasyon alır) bir oyuncu var mı ve bir Sahne Alanı'na eklendiğinde kendini canlandırıyor mu, yoksa kendi Görüntü sınıfınızı hayata geçirmeli ve kendiniz hareketlendirmelisiniz?LibGDX animasyonlu bir oyuncu var mı?

cevap

9

Sadece ben animasyonlu Erkek Oyuncu bulamadık gibi yüzden kendimi yarattı:

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: Ben sadece "bir yaratılmış

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

Benzer bir şey yaptılar. Beklemek ve herkesin gerçek bir aktör sınıfına işaret edip edemeyeceğini göreceğim, ancak eğer bunu cevap olarak işaretleyeceğim. – Lokiare

+0

Snippet'iniz için çok teşekkür ederim bayım. –

+0

Bu biraz daha yavaş "doğrudan" yaklaşımı gibi görünüyor: TextureRegion frame2 = bird_07.getKeyFrame (stateTime, true); stage.getSpriteBatch(). Begin(); stage.getSpriteBatch() çizmek (currentFrame, 1000, 700); herhangi bir fikrin neden? – atok

17

AnimatedImage "Sadece bir Animasyonu bağımsız değişken olarak alan aktör sınıfı (özel Drawable sınıfına gerek yoktur). Bence bu çözüm, yukarıdakilerden çok daha basit.

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