gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:51 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com