2

我正在尝试在我的游戏中实现基于图块的照明系统,同时保持最佳性能。目前,没有照明我有大约 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 的值。

我想知道是否有另一种更有效地渲染灯光的方法。任何帮助将不胜感激。

4

1 回答 1

1

虽然我理解您的担忧,但您可能正在做一些称为“过早优化”的事情。300-400 FPS 很多,通常即使“只有”30 也可以。当您开始实现游戏并且引擎很简单时,您会在 FPS 上获得疯狂的数字,每增加​​一个功能都会使 FPS 下降。但是如果你超过了一些合理的数量(比如50),我不会太担心。一旦你完成了所有功能并且你看到它的速度很慢或者想要更多地打磨引擎,就开始优化。

基本上专注于首先完成所有功能,然后才担心性能。

但是,您可以做的是预先计算:

255/光数据[y][x]

与其将 1-8 存储在 lightData 中,不如存储 255/1、255/2 等。除法非常昂贵。这可能不会带来很多,但它是一些事情并且应该很容易做到。您甚至可以在缓冲区中预渲染变暗/变亮的瓷砖并从中绘制它们。

于 2013-11-09T19:32:48.150 回答