java - 点击主页按钮时 libGDX 纹理消失

标签 java android libgdx

我正在使用 libGDX 为 Android 开发手机游戏。我注意到当我点击主页按钮然后返回游戏时,玩家已经消失了。舞台上的所有其他 Actor 都存在,当我删除移动玩家的代码时,它也会被绘制出来。它只有在移动时才会消失。我做了很多调试,有时位置似乎正确更新但播放器不可见,但有时只是 NaN。例如,我曾尝试在暂停功能中保存位置和速度,并在恢复功能中为玩家提供它们,但没有任何帮助。

这就是我在播放器更新功能中所做的:

// When these lines are removed, the app works perfectly
velocity.add(0.0f, GRAVITY);
velocity.scl(deltaTime);
position.add(velocity);
velocity.scl(1/deltaTime);

即使我在 resume 函数中重新创建播放器也无济于事

player2 = new Player(resourceManager.getRegion("player"), new Vector2(320.0f, 350.0f), 300.0f);

最后,我尝试创建完全不同的播放器对象,该对象在单击主页按钮后绘制。它是可见的,但不会移动:

player2 = new Player(resourceManager.getRegion("player"), new Vector2(320.0f, 350.0f), 300.0f);

最佳答案

有趣的是,我今天遇到了同样的问题,恢复后每个纹理( Actor )都保留在屏幕中,但不是主要 Actor ,而是正在移动的 Actor (在我的例子中是主要 Actor )。经过几个小时的调试,我发现当游戏状态在暂停和恢复之间变化时,渲染方法(我的看起来像这样)的 deltaTime 将为 0:

 @Override public void render(float deltaTime) {
        update(delta);
        spriteBatch.setProjectionMatrix(cam.combined);
        spriteBatch.begin();
        spriteBatch.draw(background, cam.position.x - (WIDTH / 2), 0, WIDTH, HEIGHT);
....
   spriteBatch.end();}

deltaTime 是从上次渲染开始耗时。 显然没有时间从暂停到恢复因此为 0。 在 Actor 更新链中,我正在像这样更新我的主要 Actor

 velocity.scl(deltaTime);
 position.add(MOVEMENT * deltaTime, velocity.y);

在恢复后的下一个渲染中传递了 0,因此是 NaN(不是数字)。

无论如何不确定是否有更好的方法来解决这个问题,但我就是这样做的,在我的主要 Actor 更新方法中简单检查零增量时间并替换为非常小的数量 .001f :(请注意在后续更新中 deltaTime 不会为零,并且此 if 语句仅在恢复后调用一次)

     public void update(float deltaTime) {
            if (deltaTime <= 0) {
                deltaTime=.001f;
            }
        velocity.scl(deltaTime);
        position.add(MOVEMENT * deltaTime, velocity.y);
...
}

关于java - 点击主页按钮时 libGDX 纹理消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44474479/

相关文章:

java - 无法解析符号 'ImageReference'

android - 列表给出重复值

Android联系人自定义字段

java - 放置 libgdx 屏幕的正确位置是什么

java - 如何在 libgdx 的中心获得舞台?

java - 无法将 SQL 结果写入 Java 文件

java - Gradle 内部 slf4j 与我自己的 slf4j 依赖项冲突

java - 使用 Spring 和 html 表单获取对象

java - .JSchException : Packet corrupt 异常

java - 如何在 libgdx 中为从 1 个角到触摸点的 Sprite 表/纹理区域设置动画?