0

我正在开发一款游戏,该游戏使用基于等距平铺地图的行星表面(示例)。每个平铺单元格都是一个小的 BufferedImage 元素。通过修改这些图像的像素(变暗和蓝移)来实现日夜循环,然后在每个建筑物上渲染窗口光照图(另一个静态 BufferedImage)。正确的 Z 顺序通过从左上角到左下角的顺序保持,并且只绘制瓷砖条。不幸的是,如果昼夜转换发生在非常快的游戏速度上,这种方法实际上会破坏图像的加速,并且渲染会变得非常慢。当前的解决方案是以大量内存增加为代价为每个图块缓存多个阴影。

用于此目的的 Graphics2D的 Java组合模式是否可以,例如,绘制正常颜色的瓷砖,在其上绘制深色表面,然后应用光照贴图?如何确保只有普通图块的像素会受到重新着色的影响?

4

1 回答 1

0

对我来说最快的方法如下所示:

  1. 将带有纯图像的视图渲染到目标缓冲区
  2. 用光照贴图图像在一秒钟内渲染视图BufferedImage
  3. BufferedImage使用自定义在目标缓冲区上绘制第二个CompositeContext

自定义CompositeContext将首先应用变暗+蓝移,然后乘以光照贴图值。

还要研究使用VolatileImage(例如参见本文)来利用硬件加速。此外,您可以考虑再次使用LWJGL(一个完整的游戏开发库)或JOGL(Java OpenGL 绑定)来利用硬件加速。如果您从未做过任何 3D 编程,它可能看起来令人生畏或矫枉过正,但对于 2D 图形来说,它确实非常优雅和直接。

于 2012-04-29T13:00:26.297 回答