Graphics2D多重复合的等距瓷砖地图

时间:2012-04-29 08:00:59

标签: java bufferedimage graphics2d

我正在开发一款游戏,该游戏使用等高的基于图块的行星表面贴图(example)。每个tile单元格都是一个小的BufferedImage元素。通过修改这些图像的像素(变暗和蓝移)来实现日夜cicles,然后在每个建筑物上呈现窗口光图(另一个静态BufferedImage)。通过按右上 - 左下左顺序保持正确的Z顺序,并且仅绘制条带的条带。不幸的是,这种方法几乎破坏了图像的加速度,如果昼夜转换以非常快的游戏速度发生,渲染变得非常慢。目前的解决方案是以大量内存增加为代价缓存每个磁贴的多个阴影。

Graphics2D的Java composition modes是否可以用于此目的,例如,绘制普通的彩色图块,在其上绘制一个黑暗的表面,然后应用光照贴图?如何确保只有普通图块的像素受到重新着色的影响?

1 个答案:

答案 0 :(得分:0)

对我来说最快的方法似乎如下:

  1. 使用普通图像将视图渲染到目标缓冲区
  2. 在第二个BufferedImage
  3. 上使用光照贴图图像渲染视图
  4. 使用自定义BufferedImage
  5. 在目标缓冲区上绘制第二个CompositeContext

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

    另请参阅使用VolatileImage(例如,请参阅this article)来利用硬件加速。此外,您可以考虑使用LWJGL(完整的游戏开发库)或JOGL(Java OpenGL绑定),再次利用硬件加速。如果你从未做过任何3D编程,它可能看起来令人生畏或过度,但它对于2D图形来说也非常优雅和直接。