2012-04-29 81 views
0

我正在製作一個使用等距瓷磚地圖作爲行星表面的遊戲(example)。每個tile單元都是一個小的BufferedImage元素。通過修改這些圖像的像素(變暗和藍色偏移)來實現日夜影像,然後在每個建築物上渲染一個窗口光照貼圖(另一個靜態BufferedImage)。正確的Z順序通過按照右上方向左下方的順序進行保存,並且只繪製瓦片條。不幸的是,這種方法實際上破壞了圖像的加速,如果白天過渡發生在非常快的遊戲速度上,渲染變得非常緩慢。目前的解決方案是以巨大的內存增加爲代價來緩存每個tile的陰影數量。Graphics2D等距瓷磚地圖的多重複合

Graphics2D的Java composition modes可用於此目的,例如繪製正常的彩色圖塊,在其上繪製一個變暗的表面,然後應用光照圖?如何確保只有普通瓷磚的像素受到再着色的影響?

回答

0

最快的方法對我來說似乎像下面這樣:

  1. 渲染與純色圖像視圖到目標緩衝區
  2. 渲染的第二BufferedImage
  3. 與光照圖像視圖中繪製第二BufferedImage使用自定義的目標緩衝區CompositeContext

自定義CompositeContext woul d首先應用變暗+藍色移位,然後乘以光照貼圖值。

同時考慮使用VolatileImage(例如參見this article)來利用硬件加速。此外,您可以考慮使用LWJGL(完整的遊戲開發庫)或JOGL(Java OpenGL綁定),再次利用硬件加速。如果你從未做過任何3D編程,它可能看起來令人生畏或矯枉過正,但對於2D圖形來說它確實非常優雅和直接。