2012-04-29 6 views
0

私は、遊星サーフェス(example)のアイソメトリックタイルベースのマップを使用するゲームに取り組んでいます。各タイルセルは小さなBufferedImage要素です。昼と夜のシクルは、これらの画像のピクセルを変更する(暗くして青くシフトする)ことによって実装され、ウィンドウライトマップ(別の静的BufferedImage)が各建物にレンダリングされます。右上 - 左下 - 左の順番で適切なZオーダーが維持され、タイルのストリップだけが描画されます。残念なことに、このアプローチはイメージの加速を実質的に破壊し、非常に速いゲーム速度で昼夜の変化が起こるとレンダリングが非常に遅くなります。現在の解決法は、各タイルに対して多数のシェードをキャッシュすることであり、莫大なメモリ増加を犠牲にしている。Graphics2Dアイソメトリックタイルマップのマルチコンポジット

この目的で使用されているGraphics2DのJava composition modesは、通常の色付きのタイルを描画し、暗い表面を描画してからライトマップを適用できますか?どのようにして、通常のタイルのピクセルだけが変色の影響を受けることを保証できますか?

答えて

0

私には最速の方法は、以下のようなものだ:

  1. ターゲットバッファ
  2. に無地の画像でビューをレンダリング二BufferedImage
  3. 上のライトマップイメージを持つビューが第二を描くレンダリングカスタムCompositeContext

カスタムCompositeContext woulを使用して、ターゲット・バッファ上BufferedImage最初に暗く+青のシフトを適用してから、ライトマップ値を掛けます。

また、ハードウェアアクセラレーションを活用するには、VolatileImage(たとえばthis articleを参照)を使用してください。さらに、LWJGL(完全なゲーム開発ライブラリ)またはJOGL(Java OpenGLバインディング)を使用して、ハードウェアアクセラレーションを利用することもできます。 3Dプログラミングを一度もやっていないのであれば、それは気になるかもしれませんが、2Dグラフィックスにとっても非常にエレガントで簡単です。

関連する問題