Trong LibGDX Có một diễn viên nào đó hoạt hình (chụp ảnh động) và khi được thêm vào một Giai đoạn hoạt hình hay bạn phải triển khai lớp Hình ảnh của riêng mình và tự tạo ảnh động đó?LibGDX có một diễn viên hoạt hình không?
11
A
Trả lời
9
Cũng giống như bạn tôi không tìm thấy diễn viên hoạt hình vì vậy tôi tạo ra bản thân mình:
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);
}
}
17
Tôi chỉ đơn giản là tạo ra một " AnimatedImage "lớp diễn viên mà chỉ mất một hình ảnh động như một đối số (không cần một lớp Drawable tùy chỉnh). Tôi nghĩ giải pháp này đơn giản hơn nhiều so với giải pháp trên.
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);
}
}
tôi đã làm một cái gì đó tương tự. Tôi sẽ đợi xem liệu có ai có thể chỉ ra một lớp diễn viên thực sự không, nhưng nếu không, tôi sẽ đánh dấu đây là câu trả lời. – Lokiare
Cảm ơn bạn rất nhiều vì đoạn trích của bạn. –
Điều này có vẻ là một chút chậm hơn sau đó "trực tiếp" cách tiếp cận: TextureRegion frame2 = bird_07.getKeyFrame (stateTime, true); stage.getSpriteBatch(). Begin(); stage.getSpriteBatch(). Vẽ (currentFrame, 1000, 700); bất kỳ ý tưởng tại sao? – atok