2010-04-21 31 views
5

我正在使用Java和使用的BufferedImages製作遊戲以將內容呈現到屏幕上。我在運行遊戲的低端機器上遇到了性能問題,所以我轉而使用速度更快的VolatileImage。除了他們實際上放慢了整個事情。Java:VolatileImage比BufferedImage更慢

使用GraphicsConfiguration.createCompatibleVolatileImage(...)創建圖像,並使用Graphics.drawImage(...)(請參見後面的鏈接以瞭解具體哪一個)來繪製圖像。它們使用雙緩衝在畫布上繪製。

有人知道這裏出了什麼問題嗎?

+0

我已經注意到了。 – Hardcoded 2010-04-21 15:15:34

+0

如果你在顯卡上的內存不足,它顯然不會幫助。 IIRC,'BufferedImage'有一些加速,所以差距可能不如以前那麼大。 – 2010-04-21 15:45:20

+0

@Norswap:我真的覺得要找到一個好的答案在於找到一流的開源Java遊戲(肯定有一些)或者一些偉大的Java演示(來自「演示場景」),並試圖理解什麼他們已經完成了。我很久以前就用非常*異乎尋常的硬件(如Amiga,SNES,模式13x等)編寫遊戲和演示程序,而且我仍然不知道如何在Java中正確「推送像素」。這再次成爲Java「過度工程化」並且不必要的複雜的領域。我不會爲這裏的某個人屏住呼吸而能夠真正幫助你。 – SyntaxT3rr0r 2010-04-21 16:20:04

回答

6

很可能你的代碼混合了加速和未加速的操作。

這個document是必讀的。對於使用加速Java圖形的任何人來說,特別是第3.2節至關重要。

+0

縮放(在裁剪的意義上,請參閱問題中的鏈接)縮放是否可能是一種不加速的操作?由於我使用精靈表,每一次繪製都必須有效地選擇圖像的一部分以繪製到屏幕上。 – Norswap 2010-04-21 16:08:17