我正在尝试在我的游戏中实现基于瓷砖的光照系统,同时保持最佳性能。目前,在没有照明的情况下,我的帧率约为 700-800 fps。当我渲染光照时,fps 下降到 300-400 左右。
我使用 g.fillRect() 渲染灯光,颜色为 Color(0,0,0,alphaValue)
法典:
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 之间的值。
我想知道是否有另一种更有效渲染灯光的方法。任何帮助将不胜感激。
虽然我理解你的担忧,但你可能正在做一些叫做"过早优化"的事情。 300-400 FPS 很多,通常即使"只有"30 个也可以。当您开始实现游戏并且引擎很简单时,您会在 FPS 上获得疯狂的数字,每个添加的功能都会使 FPS 下降。但是,如果您超过合理的数量(例如50),我不会太担心。一旦您完成了所有功能并且您看到它很慢或想要进一步完善引擎,就开始优化。
基本上专注于首先完成所有功能,然后再担心性能。
但是,您可以做的是预先计算:
255/光数据[y][x]
与其在 lightData 中存储 1-8,不如存储 255/1、255/2 等,除法相当昂贵。这可能不会带来很多,但这是一件事情,应该很容易做到。您甚至可以在缓冲区中预渲染变暗/变亮的图块,并从中绘制它们。