2011-12-29 24 views
0

通常,一個小程序將調用不同的方法,這些方法將有一個Graphics2D對象在屏幕上結束。是否有可能在Applet中創建自己的Graphics2D並與另一個結合使用?

在這個過程中,這些方法將操作並在這個對象上繪製東西。

但我的問題是,我有一些非常靜態的圖像,需要計算和繪製每個幀。

我該如何構建一個可緩存的圖形對象,然後重新應用移動的對象?例如,我有這個靜態背景抽屜,Graphics2D對象是Applet中的一個。

private Graphics2D drawbackground(Graphics2D g2d) { 
    // Debug grid layer 
    int x = 0; 
    int y = 0; 

    for (int i = 0; i < 9; i++) { 
    if (x == 0 && y == 0 || y % 82 == 0) { 
     x = 0; 
     for (int t = 0; t <= 5; t++) { 
     g2d.setColor(Color.WHITE); 
     g2d.drawLine(x, y + 41, x + 41, y); 
     g2d.drawLine(x + 41, y, x + 82, y + 41); 
     g2d.drawLine(x, y + 41, x + 41, y + 82); 
     g2d.drawLine(x + 82, y + 41, x + 41, y + 82); 
     x += 82; 
     } 
     y += 41; 
    } else if (y % 41 == 0) { 
     x = 41; 
     for (int t = 0; t <= 5; t++) { 
     g2d.setColor(Color.WHITE); 
     g2d.drawLine(x, y + 41, x + 41, y); 
     g2d.drawLine(x + 41, y, x + 82, y + 41); 
     g2d.drawLine(x, y + 41, x + 41, y + 82); 
     g2d.drawLine(x + 82, y + 41, x + 41, y + 82); 
     x += 82; 
     } 
     y += 41; 
    } 
    } 
} 

是否有可能產生這些圖紙,並在緩存副本重新使用它們,所以我的小程序並不需要使用時通過這些drawLines每個畫上運行?

+3

爲什麼不使用一個BufferedImage做到這一點? – Raveline 2011-12-29 15:01:23

回答

1

我同意Raveline,BufferedImage是我會去這個解決方案的地方。然而,雙緩衝是在你深入研究這個問題之前,你需要頭腦的概念。

http://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html

+0

如何創建一個透明的BufferedImage而不依賴當前正在繪製的當前Graphics對象? – 2011-12-29 16:20:15

+0

我剛剛發現了這個: BufferedImage offscreen = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB); \t Graphics2D empty = offscreen.createGraphics(); 我不知道爲什麼我以前很困惑,謝謝你的幫助。 – 2011-12-29 16:26:09

相關問題