【问题标题】:Graphics2D multi-composite of an isometric tile map等距平铺地图的 Graphics2D 多重复合
【发布时间】:2012-04-29 08:00:58
【问题描述】:

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

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

【问题讨论】:

    标签: java bufferedimage graphics2d


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2015-04-22
      相关资源
      最近更新 更多