1

Javaで効率よく2D描画をしたい。ビュー階層をトラバースして更新する必要がなく、自由に描画できるある種のサーフェスが必要です。これにより、スタッターが発生する可能性があります。

最初にJPanelを使用してrepaint()を呼び出しましたが、最適ではないことがわかりました(それが私が尋ねる理由です)。私が使った最も近いものは Android のSurfaceViewで、専用の描画面を提供してくれます。

この専用の描画面を実現するには、OpenGL を使用する必要がありますか、または同等のものはありますSurfaceViewか?

4

1 に答える 1

4

Accelerated Graphics が必要ない場合は、BufferedImageで描画できますGraphics2D。にデータを入れたら、コンポーネントに をBufferedImageペイントするだけです。BufferedImageこれにより、話しているちらつきが回避されます。

BufferedImage の作成は簡単です。

int w = 800;
int h = 600;
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

次に、グラフィックス コンテキストを使用してオブジェクトをその上に描画できます (おそらく独自のレンダリング関数で):

Graphics2D g = bi.createGraphics();
g.drawImage(img, 0, 0, null);
//img could be your sprites, or whatever you'd like
g.dipose();//Courtesy of MadProgrammer
//You own this graphics context, therefore you should dispose of it.

次に、コンポーネントを再描画するときに、その上に BufferedImage を 1 つのピースとして描画します。

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(bi, 0, 0, null);
}

BufferedImage をバック バッファーとして使用し、描画が完了したら、コンポーネントに再描画するようなものです。

于 2013-08-06T08:18:11.200 に答える