Java 退出并重新输入应用程序时,LibGDX动画将消失

Java 退出并重新输入应用程序时,LibGDX动画将消失,java,android,libgdx,Java,Android,Libgdx,这个问题我已经有一段时间了,我就是找不到解决办法 我的游戏中有一个角色动画,效果非常好,只是当我退出应用程序并在不关闭它的情况下返回时,它就消失了。我所说的“消失”,并不是说它只是看不见的,因为如果它是看不见的,碰撞检测仍然适用,但它不是 我使用的自定义动画类如下所示: public class Animation { private Array<TextureRegion> frames; private float maxFrameTime; privat

这个问题我已经有一段时间了,我就是找不到解决办法

我的游戏中有一个角色动画,效果非常好,只是当我退出应用程序并在不关闭它的情况下返回时,它就消失了。我所说的“消失”,并不是说它只是看不见的,因为如果它是看不见的,碰撞检测仍然适用,但它不是

我使用的自定义动画类如下所示:

public class Animation {
    private Array<TextureRegion> frames;
    private float maxFrameTime;
    private float currentFrameTime;
    private int frameCount;
    private int frame;

public Animation(TextureRegion region, int frameCount, float cycleTime){
    frames = new Array<TextureRegion>();
    int frameWidth = region.getRegionWidth() / frameCount;
    for(int i=0; i<=frameCount; i++)
        frames.add(new TextureRegion(region, i * frameWidth, 0, frameWidth, region.getRegionHeight()));
    this.frameCount = frameCount;
    maxFrameTime = cycleTime / frameCount;
    frame = 0;
}

public void update(float dt){
    currentFrameTime +=dt;
    if(currentFrameTime > maxFrameTime) {
        frame++;
        currentFrameTime = 0;
    }
    if(frame >= frameCount)
        frame = 0;

}
public TextureRegion getFrame(){
    return frames.get(frame);
}
公共类动画{
专用阵列帧;
私有浮点最大帧时间;
私有浮动帧时间;
私有整数帧计数;
私有int帧;
公共动画(纹理区域、整数帧数、浮点循环时间){
frames=新数组();
int frameWidth=region.getRegionWidth()/frameCount;
对于(int i=0;i maxFrameTime){
frame++;
currentFrameTime=0;
}
如果(帧>=帧计数)
帧=0;
}
公共纹理区域getFrame(){
返回frames.get(frame);
}
}

我听说过一个名为“onPause”的函数,但我不知道如何访问它。即使我可以,我会在上面写些什么来解决我的问题?我使用的不是GDX的“Screen”,而是一个定制的“State”类

编辑:这是我的角色移动代码:

 if(isAlive)
        birdAnimation.update(dt);
 if (position.y > 0 && isAlive) {
        velocity.add(0, GRAVITY * dt);
    }
 velocity.scl(dt);
 if(isAlive) {
        position.add(MOVEMENT * dt, velocity.y);
        velocity.scl(1 / dt);
    }
 if (position.y < 0)
        position.y = 0;
 if(position.y >= 1300 - sprite.getHeight())
        position.y = 1300 - sprite.getHeight();
if(isAlive)
更新(dt);
if(position.y>0&&isAlive){
速度加(0,重力*dt);
}
速度。症状自评量表(dt);
如果(现场){
位置加(运动*dt,速度.y);
速度。scl(1/dt);
}
如果(位置y<0)
位置y=0;
如果(position.y>=1300-sprite.getHeight())
position.y=1300-sprite.getHeight();

仅在移动设备上运行时会发生这种情况吗?或者当你在桌面上运行它时?@OvidiuDolha在所有设备上都会发生这只是一个猜测,一个非常疯狂的猜测。也许你的角色穿过地板,然后一次次地掉下来。这样做的原因是,当您返回游戏时,所有经过的时间都将在下一帧中用作deltatime。所以你的角色穿过地板。您可以在使用deltatime进行任何计算之前轻松解决此问题。比如:如果(delta>0.05)delta=0.05@莱斯特我不认为这个角色从地上掉下来的可能性存在,因为如果他掉到一定高度以上,我有条件让他死。你确定他没有死吗?无论如何,试着打印出角色的位置,这样你就知道在你回到游戏后,他会发生什么事情。这种情况只在手机上运行时会发生吗?或者当你在桌面上运行它时?@OvidiuDolha在所有设备上都会发生这只是一个猜测,一个非常疯狂的猜测。也许你的角色穿过地板,然后一次次地掉下来。这样做的原因是,当您返回游戏时,所有经过的时间都将在下一帧中用作deltatime。所以你的角色穿过地板。您可以在使用deltatime进行任何计算之前轻松解决此问题。比如:如果(delta>0.05)delta=0.05@莱斯特我不认为这个角色从地上掉下来的可能性存在,因为如果他掉到一定高度以上,我有条件让他死。你确定他没有死吗?无论如何,试着把角色的位置打印到logcat上,这样你就能知道在你回到游戏后他发生了什么