0

惑星の表面にアイソメトリックタイルベースのマップを使用するゲームに取り組んでいます()。各タイルセルは小さなBufferedImage要素です。昼と夜のシクルは、これらの画像のピクセルを変更することによって実装され(暗くなり、青にシフトします)、次にウィンドウライトマップ(別の静的BufferedImage)が各建物にレンダリングされます。適切なZオーダーは、右上から左下の順序で維持され、タイルのストリップのみが描画されます。残念ながら、このアプローチは画像の加速を実質的に破壊し、昼夜の遷移が非常に速いゲーム速度で発生すると、レンダリングが非常に遅くなります。現在の解決策は、メモリの大幅な増加を犠牲にして、タイルごとにいくつかのシェードをキャッシュすることです。

この目的で使用されるGraphics2DのJava合成モードは、たとえば、通常の色のタイルを描画し、その上に暗い表面を描画してから、ライトマップを適用できますか?通常のタイルのピクセルのみが色の変更の影響を受けるようにするにはどうすればよいですか?

4

1 に答える 1

0

私への最速のアプローチは次のようなもののようです:

  1. プレーン画像を含むビューをターゲットバッファにレンダリングします
  2. 1秒でライトマップ画像を使用してビューをレンダリングしますBufferedImage
  3. BufferedImageカスタムを使用してターゲットバッファに秒を描画しますCompositeContext

カスタムCompositeContextは、最初に暗くする+青のシフトを適用し、次にライトマップ値を掛けます。

また、ハードウェアアクセラレーションを活用するための(たとえば、この記事VolatileImageを参照)の使用についても検討してください。さらに、ハードウェアアクセラレーションを活用するために、LWJGL(完全なゲーム開発ライブラリ)またはJOGL (Java OpenGLバインディング)の使用を検討することもできます。3Dプログラミングを行ったことがない場合は、気が遠くなるかやり過ぎに思えるかもしれませんが、2Dグラフィックスでも非常にエレガントでわかりやすいです。

于 2012-04-29T13:00:26.297 に答える