【问题标题】:Lag problems while using libgdx and box2d使用 libgdx 和 box2d 时出现滞后问题
【发布时间】:2015-09-06 09:01:13
【问题描述】:

我刚刚使用 libgdx 和 box2d 为 android 开发了我的垂直滚动游戏。 一切正常,直到我实现了游戏状态的处理(暂停、恢复、运行、游戏结束)。我遵循了 superjumper 的示例并且它有效。这是我更新状态的代码:

   @Override
public void update(float deltaTime) {

    switch (state) {
        case GAME_RUNNING:
            assetsLoader.update(deltaTime, world);
            world.step(deltaTime, 12,6);
            updateRunning();
            break;
        case GAME_PAUSED:
            world.step(0, 12, 6);
            updatePaused();
            break;
    }

}

这里有我在渲染方法中调用的函数 draw:

public void draw(){

    switch (state) {
        case GAME_RUNNING:
            presentRunning();
            break;
        case GAME_PAUSED:
            presentPaused();
            break;
        case GAME_OVER:
            presentGameOver();
            break;
    }

}

现在的问题是,当我开始游戏时,我尝试了很多延迟(我的 fps 大约为 59-61)和我的身体(我只有 10 个,它们以永远不变的线速度移动)开始口吃。我已经将 restitution 设置为 0 但没有任何改变,所以我认为问题出在 switch 状态可能是因为它降低了我的游戏性能,也因为在我实施这部分之前我没有遇到这些问题。

是否可以通过其他方式管理游戏状态?

【问题讨论】:

  • 你的问题可能出在“present___”方法上,而不是状态处理本身。
  • 感谢您的回答@EpicPandaForce,但我的“present_”方法没有任何问题。如果我从函数 draw 中删除开关部分并只放置“presentRunning”以及函数更新中的开关部分,则游戏可以正常工作(显然我无法暂停它并且玩家不会死亡)。
  • 当您删除switch 时,FPS 有多高?对我来说,听起来你的状态有时是错误的,因此身体在某些帧内不会移动,从而导致口吃。
  • 您是否使用缩放相机缩放身体?还是你绘制和渲染实际尺寸?

标签: java android libgdx box2d


【解决方案1】:

人们在使用 Box2D 时常犯的一个错误是他们的每米像素比率太低了。 Box2D 使用米而不是像素,因此您在 Box2D 内外的测量值应按比例缩小。

如果没有,您也可以尝试降低每个周期的 Box2D 更新(world.step(...) 中的 12 和 6)。

如果这仍然不起作用,请确保您没有渲染两次,这可能是由于更新资产调用和presentRunning() 调用的原因。

如果一切都失败了,试试 if 语句...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多