2013-05-03 40 views
-2

目前,我正在嘗試在我正在編寫的遊戲中製作一個用於管理剪輯的面板。當玩家點擊鼠標時,它將突出顯示在屏幕右側的剪輯,並且如果玩家在鍵盤上按下H,它將在屏幕上向玩家顯示一些幫助符號。當我繪製這些幫助字符串時,我畫了一個大的灰色正方形,然後是黑色的文字。當我嘗試清除它時(通過重置圖像將它全部繪製到來自我的源文件的空白圖像上),所有新事物都會在幫助屏幕上繪製,而不是幫助屏幕被清除。空白圖片層沒有正確復位Java

public void refresh(){ 
     overImg = World.imageBank.getImage("blank", -1).getSubimage(0, 0, 400, 400); 
    drawInfo(); 
     drawClips(); 
     drawLayers(); 
     repaint(); 
    } 

imageBank正是它聽起來像一個世界初始化時繪製的圖像庫。 getImage(「blank」,-1)返回我製作的具有空白Alpha通道的1200,1200圖像,並使用它的較小版本。每次按任何按鈕時都會調用此刷新方法,並且我無法理解圖像未重置的原因。如果有任何其他代碼需要提供,那可能是我的問題,請告訴我。

+0

我不知道你的問題是否是目前寫的無法回答的。這是猜測代碼中未顯示的問題。您可能需要先嚐試解決我認爲存在的問題。 – 2013-05-03 01:38:03

+0

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-05-03 05:33:44

+0

*「感謝您的幫助, -Jarrod」*請勿包含sigs。在問題中,它們是噪音。如果你的名字對你很重要,請編輯[你的檔案](http://stackoverflow.com/users/2277640/angrylolrus)。 – 2013-05-03 05:35:22

回答

1

對於遇到同樣問題的其他人,我的朋友向我展示瞭解決方案。當我從圖像庫中提取圖像時,它並沒有創建一個新的圖像(本應該是很明顯的),它只是給出原始圖像的子圖像部分,這意味着我正在繪製到我的空白緩衝區存儲在圖像庫中的圖像。應該採取什麼措施來防止這種情況需要對圖像進行深層次的複製,這需要像這樣做(或多或少)。

public static BufferedImage deepCopyImage(BufferedImage bF){ 
     ColorModel cm = bF.getColorModel(); 
     boolean alphaPre = bF.isAlphaPremultiplied(); 
     WritableRaster wR = bF.copyData(null); 
     return new BufferedImage(cm, wR, alphaPre, null); 
    }