在Java中進行2D遊戲開發時,大多數教程都會創建一個緩衝策略來渲染。這非常合理。 但是,人們似乎傾向於將實際圖形繪製到緩衝區的方法。Java緩衝策略圖形或整型數組
一些教程創建了一個緩衝圖像,然後創建一個整數數組來表示各個像素的顏色。
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
Graphics g = bs.getDrawGraphics();
g.setColor(new Color(0x556B2F));
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
然而,一些其他教程不創建緩衝圖像,繪圖的像素爲int陣列,而是使用BufferStrategy中的圖形部件直接繪製它們的圖像的緩衝器。
Graphics g = bs.getDrawGraphics();
g.setColor(new Color(0x556B2F));
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(testImage.image, x*128, y*128, 128, 128, null);
我只是想知道,爲什麼要創建整個int數組,然後繪製它。這需要在實現矩形,拉伸,透明度等方面做更多的工作。緩衝策略的圖形組件已經具有可以很容易地調用的方法。 使用int數組會有一些巨大的性能提升嗎?
我已經看了幾個小時,所有我見過的網站只是解釋他們在做什麼,而不是他們爲什麼選擇這樣做。
我不是100%確定,但我會出現一些人認爲它更快地更新int /像素數組,然後使用圖形API。這可能是真實的,人們也可能不知道如何創建兼容的圖形對象。使用緩衝策略應該提供幾乎直接訪問硬件層(如果可用),所以我不明白爲什麼你需要明白爲什麼你需要使用一個int數組,我只是這樣,而我懶得那樣;) – MadProgrammer
是的,我正在用這兩種方法進行測試。使用int數組,我可以在我的fps開始減少到120以下之前改變大約27648000像素。使用圖形對象,我可以渲染透明圖像,放大到幾千倍的縮放矩形,這幾乎與int數組相等。 使用圖形對象似乎更有用。 – Kabistarz
前段時間,我做了一個比較簡單的例子,只用了一些JPanel和一些自定義繪畫作爲主要對象。然後我得到了4500個這些物體都朝不同的方向移動,包括主要物體的旋轉,因此它指向它的運動方向。不確定幀速率是多少,但是我以25fps的速度刷新了它,並且它的表現非常出色。我認爲在渲染管道中有很多優化,可以使用DirectX或OpenGL,但需要進行實驗;) – MadProgrammer