2013-05-30 73 views
3

我正在使用Java,swing和Java2D開發一個用於迷宮生成的項目。我對Java2D相當陌生,所以請原諒,如果這個問題是新鮮的。避免重繪整個迷宮的最佳方法?

基本上,我有一個成功生成的迷宮。我希望在我設置並正確覆蓋PaintComponent的自定義JPanel上繪製迷宮。我現在的問題是我目前有能力畫迷宮,但每次重畫它都會消失。我已經通過每次調用repaint()重繪迷宮來解決這個問題,但這看起來非常低效。既然迷宮沒有改變,我爲什麼要重繪呢?

所以我的問題是這樣的:有什麼辦法可以「緩存」迷宮的繪圖,所以我不必浪費週期重繪它的每一次?我可以看到每次都會重新繪製它,因爲特大的迷宮是緩慢起伏的主要原因。

謝謝!

+0

如果在第一次調用'super.PaintComponent'時繪製'paintComponent',則雙緩衝不應該給出繪製效果。在繪製時沒有太多的創建或其他昂貴的操作,在paintComponent中沒有'repaint'。減少重畫,重畫(50L)更好。 –

回答

3

將迷宮繪製到BufferedImage。然後在paintComponent()方法中繪製BufferedImage。 Swing將決定整個迷宮還是僅僅部分需要重新粉刷。

有關在BufferedImage上繪製的示例,請參閱Custom Painting Approaches中的DrawOnImage示例。

0

如果迷宮從未改變,您可以將其初始化爲BufferedImage。您可以使用您編寫的相同代碼來覆蓋paintComponent,方法是創建BufferedImage並調用image.createGraphics()以獲得Graphics2D對象。您對Graphics2D對象所做的任何繪畫都會從createGraphics()返回,將被添加到BufferedImage。您可能必須將您以前的繪圖代碼提取到它自己的函數中,該函數需要一個對象並繪製它。

一旦你有你的迷宮捲入BufferedImage,您可以在GraphicsGraphics2D使用任何drawImage()功能。這避免了重繪迷宮:現在你只是繪製已經渲染的圖像。