我正在制作 Terraria 的副本,显然有一个下方区域,其中将加载数以千计的“污垢”对象。然而,这会导致我的 FPS 大幅下降。我已经在网上搜索过,但由于我的具体问题,我找不到任何解决方案。我试过只渲染 100 个 block 并且只渲染屏幕中的内容,但是即使渲染了 300 个左右的 block ,我的 FPS 也会下降到 20。我的游戏看起来像这样 (只渲染看到的)
正好有 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 。如果其中任何一个中断,只需重新计算大的矩形区域,并绘制新的较小的簇。
关于java - 加载数千个对象后我的帧率下降,如何处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32323153/