Java 迷宫绘图(性能更好)libgdx
在我的游戏中,我使用ShaperEnder类绘制迷宫。基本上,我使用矩形函数(在ShaperEnder类中)绘制小黑线。在过去,我在调试游戏性能方面没有问题(fps=60)。但最近,我遇到了一些性能问题。简而言之,我拿出了我在游戏中画的所有精灵和演员,决定只画迷宫。每次我通过桌面启动器调试游戏时,fps性能都会降低一半(基本上是33,34 fps左右)。然而,当我运行它时,它会上升到每秒60帧 我相信这清楚地表明ShaperEnder类不是我绘制迷宫性能图的最佳选择。我试过使用带有纹理png图像(矩形)的spritebatch,但没有改变任何事情。我想知道是否有更好的选择来绘制迷宫,并且仍然将fps性能保持在60(在调试模式下),或者调试游戏会将fps性能降低一半是正常的吗 这是我的代码,在绘制迷宫的渲染方法中:Java 迷宫绘图(性能更好)libgdx,java,android,performance,opengl-es,libgdx,Java,Android,Performance,Opengl Es,Libgdx,在我的游戏中,我使用ShaperEnder类绘制迷宫。基本上,我使用矩形函数(在ShaperEnder类中)绘制小黑线。在过去,我在调试游戏性能方面没有问题(fps=60)。但最近,我遇到了一些性能问题。简而言之,我拿出了我在游戏中画的所有精灵和演员,决定只画迷宫。每次我通过桌面启动器调试游戏时,fps性能都会降低一半(基本上是33,34 fps左右)。然而,当我运行它时,它会上升到每秒60帧 我相信这清楚地表明ShaperEnder类不是我绘制迷宫性能图的最佳选择。我试过使用带有纹理png图像
for(int x = 0; x < rows; x++){
for(int y = 0; y < columns; y++){
if(this.grid[x][y].north.hasWall){ //NORTH BORDER LINE
shapeRenderer.rect(22+((GENERIC_WIDTH_HEIGHT_MAZE+10)*x), 450-((GENERIC_WIDTH_HEIGHT_MAZE+10)*y), GENERIC_WIDTH_HEIGHT_MAZE+10, 0, color1, color2, color3, color4);
}
if(this.grid[x][y].west.hasWall){ //WEST BORDER LINE
shapeRenderer.rect(22+((GENERIC_WIDTH_HEIGHT_MAZE+10)*x), 450-((GENERIC_WIDTH_HEIGHT_MAZE+10)*y), 0, -GENERIC_WIDTH_HEIGHT_MAZE-10, color1, color2, color3, color4);
}
if(this.grid[x][y].east.hasWall){ //EAST BORDER LINE
shapeRenderer.rect(22+((GENERIC_WIDTH_HEIGHT_MAZE+10)*(x+1)), 450-((GENERIC_WIDTH_HEIGHT_MAZE+10)*y), 0, -GENERIC_WIDTH_HEIGHT_MAZE-10, color1, color2, color3, color4);
}
if(this.grid[x][y].south.hasWall){ //SOUTH BORDER LINE
shapeRenderer.rect(22+((GENERIC_WIDTH_HEIGHT_MAZE+10)*x), 450-((GENERIC_WIDTH_HEIGHT_MAZE+10)*(y+1)), GENERIC_WIDTH_HEIGHT_MAZE+10, 0, color1, color2, color3, color4);
}
}
}
如果运行它时渲染速度足够好,那么我就不会担心调试时的性能 但总的来说,这看起来像是可以极大优化的:
由于调试缓慢的原因可能有很多,因此您可能需要一个系统来检查当前实际的图形FPS。您可以通过将场景绘制到与屏幕大小相同的FBO来测试这一点,并尝试在for(或)while循环和测量FPS中继续绘制场景。这会让你粗略估计你离极限有多近 最后,我制作了一个包含绘制的墙(小png图片)的TextureAtlas,并调用其中两个(一个水平,一个垂直)来绘制迷宫并去掉ShaperEnder。正如Deniz Yılmaz提到的,ShaperEnderis仅用于调试,这可能就是为什么for循环中的性能会降低。我还对代码的其他部分进行了一些其他性能优化。现在的表现是在60 fps的所有时间。谢谢大家 提供更多上下文,例如行值、高度、通用宽度高度迷宫和其他可能相关的信息。有人有任何线索吗?请提供完整的render()方法。实际上,render()方法中只有这些内容。除此之外别无选择。您忘记清除backbuffer,这会导致gpu每次都重新构建backbuffer。您应该添加类似Gdx.gl.glClear(…)的内容。此外,您从未调用shaperender.begin/end,也从未设置投影矩阵。因此,这根本不可能显示任何内容。@Matic Oblak:#2)面对淘汰会做什么?据我所知,它只用于3d形状。我只是在展示一个二维迷宫。5) 如何生成GPU缓冲区?你有链接或教程,我可以按照这样做吗?1) 我怎么能做到呢?
GENERIC_WIDTH_HEIGHT_MAZE = 26 (Integer)
rows = 9
columns = 12
color1 = color2 = color3 = color4 = Color.BLACK