我正在尝试在我的游戏中实现基于图块的照明系统,同时保持最佳性能。目前,没有照明我有大约700-800 fps。当我渲染光照时,fps下降到300-400左右。
我使用颜色为Color(0,0,0,alphaValue)的g.fillRect()渲染灯光
代码:
for (int y = startY; y<endY; y++) {
for (int x = startX; x<endX;x++) {
g.setColor(new Color(0, 0, 0, 255/lightData[y][x]));
g.fillRect((x*Tile.width)-Camera.x, (y*Tile.height)-Camera.y,
Tile.width, Tile.height);
}
}
LightData [y] [x]是1-8的值。
我想知道是否有另一种更有效渲染灯光的方法。任何帮助将不胜感激。
答案 0 :(得分:1)
虽然我理解您的担忧,但您可能正在做一些名为“过早优化”的事情。 300-400 FPS是很多,通常你甚至只有“只”30即可。当你开始实施游戏并且引擎很简单时,你会在FPS上获得疯狂的数字,每增加一个功能都会使FPS下降。但是,如果你超过一些合理的金额(如50),我不会太担心。一旦完成所有功能就开始优化,你会发现它很慢或想要更多地抛光引擎。
基本上专注于首先完成所有功能,然后再担心性能。
然而,您可以做的是预先计算:
255 / lightData [Y] [X]
不是将1-8存储在lightData中,而是存储255 / 1,055 / 2等。分区非常昂贵。这可能不会带来很多,但这是一件容易的事情。您甚至可以将暗色/浅色的瓷砖预先放入缓冲区并从中拉出来。