在我的游戏中,我正在使用ShapeRenderer类来绘制迷宫。基本上,我使用矩形函数(在ShapeRenderer类中)绘制小黑线。在过去,我在调试游戏性能方面没有问题(fps = 60)。但最近,我遇到了一些性能问题。为了缩短它,我拿出了我在游戏中画出的所有精灵和演员,并决定只绘制迷宫。每次我通过Desktop Launcher调试我的游戏时,fps性能会降低一半(基本上是33,34 fps)。然而,当我运行它时,它会达到60 fps。
我相信这是一个明确的迹象,表明ShapeRenderer类不是我画迷宫性能的最佳选择。我尝试过带有纹理png图像(矩形)的spritebatch并且没有改变任何东西。我想知道是否有更好的选择来绘制迷宫并仍然将fps性能保持在60(在调试模式下),或者调试游戏会将我的fps性能降低一半是正常的吗?
P.S:这是我的代码,它在绘制迷宫的渲染方法中:
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);
}
}
}
任何见解都将不胜感激。是以下值:
GENERIC_WIDTH_HEIGHT_MAZE = 26 (Integer)
rows = 9
columns = 12
color1 = color2 = color3 = color4 = Color.BLACK
答案 0 :(得分:1)
如果在运行它时渲染速度足够好,那么在调试时我不会担心性能。
但总的来说,这看起来像你可以大大优化的东西:
这些只是您可以优化的几个指针,但我会尝试尽可能晚地优化它,并且只在需要时。调试速度太慢通常不是开始优化的好理由。
由于调试速度慢的原因很多,您可能希望系统能够检查当前的实际绘图FPS。您可以通过将场景绘制到与屏幕大小相同的FBO来测试,并尝试仅在for(或)while循环中绘制场景并测量FPS。这使您可以粗略估计您的极限接近。
答案 1 :(得分:0)
嗯,最后,我做了一个包含绘制的墙壁(小png图片)的TextureAtlas,并调用其中两个(一个水平和垂直)来绘制迷宫并摆脱ShapeRenderer。像DenizYılmaz提到的那样,ShapeRendereris仅用于调试,这可能是for循环中性能降低的原因。我还在代码的其他部分进行了其他一些性能优化。现在性能始终为60 fps。谢谢大家!