我一直在Java 2D遊戲一小會兒。它是一個具有像素陣列(整數)的光柵圖形系統。像素陣列太強的CPU
private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
我然後分別創建一個整數數組,與屏幕的對象操縱它(從外部圖像文件,例如.png渲染),則該數組複製到我的主要一種,是指投影在屏幕上。我發現在迭代中使用數組複製方法沒有性能差異(實際上並不期望)。無論如何,圖形渲染效果很好,遊戲也會順利進行。
然而,我發現這是非常CPU密集型。我的活動監視器說應用程序使用了超過100%的CPU。這顯然是因爲我每遍更新一次像素數組(76k整數)(每秒60次)。
我選擇了這個技術用於教育目的。這是一個個人項目,我只是想深入瞭解Java圖形。我決不會嫁給這種渲染技術。
我的問題有三個相關部分...
- 顯然有更好的方法來做到這一點。什麼庫/框架會做得更好?
- 這些庫基本上會以更高效的方式執行相同的操作(循環遍歷像素)嗎?
- 有沒有一種方法可以在不使用外部工具的情況下優化這種技術,還是它不值得嗎?
您是否想過使用OpenGL?如果你想像素做點什麼,你可以渲染成一個紋理,但這隻會做一次,並且你可以在其他每一幀中重複使用這個紋理。 – fiz 2013-02-11 23:33:09
我對OpenGL沒有任何經驗,主要是因爲我的印象是它與我的系統(二維和外部圖像文件呈現)配合不佳。我將研究OpenGL紋理。 – MattDavBen 2013-02-11 23:35:33
這真的取決於你如何處理你的圖像加載,但是一旦你把它變成一個類似RGB的數組,你可以在紋理上使用它。你也可以使用建立在OpenGL之上的許多庫中的一個,它們可以自己加載圖像。 – fiz 2013-02-11 23:39:52