2

LinuxでJava2Dを使用してASCIIのようなマップでゲームを作成しています(ローグライクのように)。

Graphics2D.drawImage を介して BufferedImages をレンダリングすることにより、地形がレンダリングされます。パフォーマンスをあまり損なうことなく、描画された各画像の色合いをその場で変更したいと思います。どうすればこれを達成できますか?

setComposite はパズルの一部だと思います。現在、背景をそのままにしておく必要はありません (透明度は問題になりません)。さまざまな色を使用したいので、着色されたスプライトを事前に生成することは解決策ではありません。

4

3 に答える 3

2

私は少し前に同様の質問をし、ここでかなり良い答えを得ましたが、事前にすべての着色を行っていました. いずれにせよ、おそらく BufferedImageOp を見たいと思うでしょう。また、JH Labs サイトには、Java での画像処理に関する有益な情報がたくさんあります。

于 2009-02-24T09:16:25.460 に答える
1

高いパフォーマンスを得るには、JOGL を使用することをお勧めします。3D 機能が必要ない場合でも、ハードウェア アクセラレーションに簡単にアクセスできます。

于 2009-02-24T11:23:35.030 に答える
0

Tom Hawtin の回答を考慮して、より多くの制御を可能にするフレームワークに切り替えることにしました。JOGL と LWJGL はどちらも着色メカニズムへのアクセスを提供しているようです。LWJGL を選択したのは、他のニーズと重複するためです。

このSpace Invaders Tutorialは、Java2D と JOGL、LWJGL の間の素敵なロゼッタ ストーンとして役立つことがわかりました。

LWJGL Sprite クラス用に作成したメソッドを次に示します。

public void drawTinted(int x, int y, float red, float green, float blue) 
{
    GL11.glPushMatrix();

    texture.bind();

    GL11.glTranslatef(x, y, 0);     
    GL11.glColor3f(red,green,blue);

    GL11.glBegin(GL11.GL_QUADS);
    {
      GL11.glTexCoord2f(0, 0);
      GL11.glVertex2f(0, 0);
      GL11.glTexCoord2f(0, texture.getHeight());
      GL11.glVertex2f(0, height);
      GL11.glTexCoord2f(texture.getWidth(), texture.getHeight());
      GL11.glVertex2f(width,height);
      GL11.glTexCoord2f(texture.getWidth(), 0);
      GL11.glVertex2f(width,0);
    }
    GL11.glEnd();

    GL11.glPopMatrix();
}
于 2009-02-24T14:51:26.263 に答える