3

Java、swing、および Java2D を使用した迷路生成のプロジェクトに取り組んでいます。私はJava2Dにかなり慣れていないので、この質問が初心者である場合はご容赦ください。

基本的に、迷路の生成に成功しました。この迷路を、設定して PaintComponent を適切にオーバーライドしたカスタム JPanel に描画したいと考えています。私が今抱えている問題は、現在迷路を描く能力があることですが、塗り直すたびに迷路が消えてしまいます。repaint() が呼び出されるたびに迷路を再描画することでこれを解決しましたが、これはひどく非効率的です。迷路は変わらないのに、なぜ再描画する必要があるのですか?

だから私の質問はこれです:迷路の描画を「キャッシュ」して、毎回再描画するサイクルを無駄にする必要がないようにする方法はありますか? 非常に大きな迷路が速度低下の主な原因であるため、毎回再描画することがわかります。

ありがとうございました!

4

2 に答える 2

3

迷路を BufferedImage に描画します。次に、paintComponent() メソッドで BufferedImage をペイントします。Swing は、迷路全体を再描画する必要があるか、その一部だけを再描画する必要があるかを決定します。

BufferedImage へのペイントの例については、 Custom Painting ApproachesDrawOnImageの例を参照してください。

于 2013-05-30T00:07:42.613 に答える
0

迷路が変化しない場合は、最初に迷路をBufferedImageに描画できます。paintComponentBufferedImage を作成し、それを呼び出しimage.createGraphics()てオブジェクトを取得することにより、オーバーライド用に記述した同じコードを使用できGraphics2Dます。Graphics2Dから返されたオブジェクトに対して行ったペイントは、createGraphics()に追加されBufferedImageます。Graphics2Dオブジェクトを取得して描画する独自の関数に、迷路のためだけに以前の描画コードを抽出する必要がある場合があります。

迷路を に描画したら、またはの機能をBufferedImage使用できます。これにより、迷路を再描画する必要がなくなります。既にレンダリングされた画像を描画するだけです。drawImage()GraphicsGraphics2D

于 2013-05-30T00:08:07.220 に答える