java - 加载数千个对象后我的帧率下降,如何处理

标签 java libgdx

我正在制作 Terraria 的副本,显然有一个下方区域,其中将加载数以千计的“污垢”对象。然而,这会导致我的 FPS 大幅下降。我已经在网上搜索过,但由于我的具体问题,我找不到任何解决方案。我试过只渲染 100 个 block 并且只渲染屏幕中的内容,但是即使渲染了 300 个左右的 block ,我的 FPS 也会下降到 20。我的游戏看起来像这样 (只渲染看到的)

enter image description here

正好有 4 个不同的图像,运行它的代码如下所示

    public void render() {
    fps.log();
    collisionHandler.run();
    // collisionHandler.update();
    player.update();

    camera.update();

    mapGrid.update();

    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);

    batch.setShader(null);
    batch.begin();
    batch.draw(background, 0, 0, Gdx.graphics.getWidth(),
            Gdx.graphics.getHeight());
    batch.end();

    mapGrid.drawGrid(renderer);
    batch.setShader(null);
    player.draw(batch, renderer);
    ground.update(batch);
    ground1.update(batch);
    for (int i = 0; i < groundList.size(); i++){
        groundList.get(i).update(batch);
    shader.begin();
    shader.setUniformf("u_resolution", groundList.get(i).getPosition());
    shader.end();
    }
    //batch.setShader(shader);

    for (int i = 0; i < dirtList.size(); i++)
        // update means render*** dirtList consists of dirt objects!
        dirtList.get(i).update(batch);

}

我已尝试将这些对象存储在池或缓存中,但似乎无法将 FPS 提高到 60。请提供任何帮助或指导,我们将不胜感激!

最佳答案

对于可以一次绘制的大簇,使用重复纹理或其他纹理可能会更好。例如,如果有一个由 10*15 block 组成的矩形簇,则不用将 150 个 block 一个一个地绘制,只需用相同的重复纹理填充这些 block 即可。当玩家与他们互动时,将其分解为更小的集群。

在您发布的屏幕截图中,所有泥土 block 都可以绘制为一个 block 。如果其中任何一个中断,只需重新计算大的矩形区域,并绘制新的较小的簇。

Here's an example for repeated textures

关于java - 加载数千个对象后我的帧率下降,如何处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32323153/

相关文章:

java - Box2D:绳索摆(不停顿)

java - 如何实现java瓦片 map 灯?

java - Spring数据redis并发问题

javascript - Libgdx HTML5 AnimationScheduler 长度为空

java - Box2D 碰撞不会调用我自己的 CollisionListener

java - 不满意链接错误 : no opencv_java249 in java. library.path

java - 如何使用 ViewPorts 为 libgdx 中的不同分辨率缩放 ImageButtons?

java - 将数据以排序方式存储在 HashSet 中

java - 我可以将多页编辑器添加到多页编辑器吗

java - Collections.sort 编译错误 - 不兼容的类型