gdx中的动画

时间:2016-08-22 18:23:19

标签: android libgdx

我在LibGDX和Android Studio中都很新。

我试图使用8个png文件创建一个简单的动画,动画会发生,但它是如此之快和不切实际。

有没有办法在帧之间设置延迟? 感谢。

public class Runningrabbit extends ApplicationAdapter {
  SpriteBatch batch;
  Texture background;
  Texture[] rabbits;
  int rabbitState = 0;
  float stateTime;

  @Override
  public void create () {
    batch = new SpriteBatch();
    background = new Texture("back.png");
    rabbits = new Texture[8];
    rabbits[0] = new Texture("rabbit1.png");
    rabbits[1] = new Texture("rabbit2.png");
    rabbits[2] = new Texture("rabbit3.png");
    rabbits[3] = new Texture("rabbit4.png");
    rabbits[4] = new Texture("rabbit5.png");
    rabbits[5] = new Texture("rabbit6.png");
    rabbits[6] = new Texture("rabbit7.png");
    rabbits[7] = new Texture("rabbit8.png");



    stateTime = 0f;
  }

  @Override
  public void render () {

    if (rabbitState == 0) {
      rabbitState = 1;
    } else if (rabbitState == 1) {
      rabbitState = 2;
    } else if (rabbitState == 2) {
       rabbitState = 3;
    } else if (rabbitState == 3) {
      rabbitState = 4;
    } else if (rabbitState == 4) {
      rabbitState = 5;
    } else if (rabbitState == 5) {
      rabbitState = 6;
    } else if (rabbitState == 6) {
      rabbitState = 7;
    } else if (rabbitState == 7) {
      rabbitState = 0;
    }

    batch.begin();
    batch.draw(background, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    batch.draw(rabbits[rabbitState], 200, 200);
    batch.end();

  }
}

1 个答案:

答案 0 :(得分:0)

您需要根据时间更改动画的状态。

例如,

float accumulator = 0f;

...

public void render(){

     float dt = Gdx.graphics.deltaTime(); //dt is the number of seconds that have passed in between each frame
     accumulator += dt;
     if(accumulator > 1)//one second has passed{
         rabbitState++;
         accumulator -= 1;
     }

...

现在,动画会每秒向前移动一次(速度很慢,但你可以调整数字)。

除了你的问题之外,我注意到通过代码查看的两件事是:

  1. 您正在为每个帧创建一个新纹理。不要这样做,具有包含所有框架的纹理并制作纹理区域。如果需要在每次绘制调用时交换纹理,那么使用SpriteBatch是没有意义的。

  2. 正如其他人所指出的那样,LibGDX中有一个动画类,它可以为你节省很多麻烦。

  3. 当您只需增加索引时,您可以使用if语句手动更改状态。