java - libgdx java 中的 FPS 在一个简单的游戏中下降到 20

标签 java libgdx

我试图将 FPS 保持在 60。但是当我运行游戏时,它会下降到大约 16-20 FPS。我似乎已经找到了问题,但我就是不明白为什么会出现问题以及如何解决它。问题在于我的网格渲染方法(我的游戏使用二维 boolean 数组进行碰撞)。我在渲染方法中使用一个双 for 循环来绘制网格本身(用于调试目的),并使用另一个双 for 循环来绘制网格中真实元素所在的位置(可以与物体发生碰撞的位置)。奇怪的是,它们本质上做了完全相同的事情,但是通过注释掉上层循环,它并不能修复它,但是注释掉下层循环却可以。这是为了更好地理解的代码。

这是完整的渲染方法

    public void render(ShapeRenderer render){

    render.setColor(Color.WHITE);
    for(int x = 0; x < mapGrid.length; x+= CELL_SIZE){
        for(int y = 0; y < mapGrid[x].length; y+= CELL_SIZE){
            render.line(x, y, x + CELL_SIZE, y);
            render.line(x + CELL_SIZE, y, x + CELL_SIZE, y + CELL_SIZE);
            render.line(x + CELL_SIZE, y + CELL_SIZE, x, y + CELL_SIZE);
        }
    }

    render.setColor(Color.RED);
    for(int x = 0; x < mapGrid.length; x++){
        for(int y = 0; y < mapGrid[x].length; y++){
            if(mapGrid[x][y]){
                render.line(x * CELL_SIZE, y * CELL_SIZE,x * CELL_SIZE + CELL_SIZE, y * CELL_SIZE);
                render.line(x * CELL_SIZE + CELL_SIZE, y * CELL_SIZE, x * CELL_SIZE + CELL_SIZE, y * CELL_SIZE + CELL_SIZE);
                render.line(x * CELL_SIZE + CELL_SIZE, y * CELL_SIZE + CELL_SIZE, x * CELL_SIZE, y * CELL_SIZE + CELL_SIZE);
            }
        }
    }


}

现在,如果我在第二个双 for 循环中注释掉 3 个 render.line 方法,就没有问题了,完整的 60 FPS 工作正常。然而,如果我注释掉第一个循环,我的 FPS 就会下降到 16 FPS。由于这仅用于调试,我知道我可以将其删除,但是我的游戏将在相当长的一段时间内处于 Debug模式,并且从现在开始使其顺利运行实际上是至关重要的。

两个循环的唯一区别是第二个双 for 循环中的一个 if 语句,并且循环稍长,但在游戏中第二个 for 循环仅渲染 3 个东西,因为只有 3 个平台正在渲染这个时间点。如果 if 语句确实是问题所在,我需要知道如何解决它。我只是不明白为什么我的 FPS 下降得这么厉害。

非常感谢任何帮助我解决这个问题的帮助。谢谢!

编辑:我每次都在顶部语句中运行一个 if 语句,并将第二个语句注释掉,并且仍然保持 60 FPS,所以我不相信它是 if 语句

最佳答案

您的第二个循环包含第一个循环中缺少的乘法负载。乘法几乎总是比加法慢很多。我会找到一种优化方法;也许预先计算它们或使用与第一个循环类似的循环。

关于java - libgdx java 中的 FPS 在一个简单的游戏中下降到 20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406945/

相关文章:

java - 在 Libgdx 中处理渐进式 jpeg 图像

java - WICKET:如何获取客户端的 ip/地址

java - 如何将 XML 文档传递给 XMLReader?

java - 使用 libGDX 的 earclippingtriangulator 和 PolygonSpriteBatch 绘制填充多边形

java - 仅从 Actor Libgdx 底部拖放触发器

java - Libx GDX 可滚动,带圆形覆盖

java - 如何防止父类(super class)被jmockit mock ?

java - MySQL:未知系统变量 'tx_read_only'

java - 表格中的单元格之间是否总是存在自然的 "space"?

java - 随机数生成器在 Android 上生成相同的数字