我在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();
}
}
答案 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;
}
...
现在,动画会每秒向前移动一次(速度很慢,但你可以调整数字)。
除了你的问题之外,我注意到通过代码查看的两件事是:
您正在为每个帧创建一个新纹理。不要这样做,具有包含所有框架的纹理并制作纹理区域。如果需要在每次绘制调用时交换纹理,那么使用SpriteBatch是没有意义的。
正如其他人所指出的那样,LibGDX中有一个动画类,它可以为你节省很多麻烦。
当您只需增加索引时,您可以使用if语句手动更改状态。