2014-02-11 35 views
1

我一直在研究一些關於幾何圖元的算法,其中兩個對我來說最重要的是筆畫和圓圈。 Oracle似乎沒有提供用於繪製這些形狀的確切信息。我之所以要這樣做,是因爲我需要將來自繪畫的受影響像素存儲到用於遊戲碰撞檢測的texturePaint []中。我主要想要專家的意見,如果它的價值,甚至做,因爲使用bufferedImages是影響我有多大,我可以製作我的遊戲地圖,因爲內存問題。它是否會減慢我的繪畫過程,通過數組迭代顯着的數量還是java遍歷每個像素以進行繪畫以繪製其形狀?幾何圖元的Java算法

回答

1

在速度方面,writeableraster可讓您對圖像進行快速更改。如果需要,您還可以使用諸如fork/join之類的工具加快速度。

在碰撞檢測方面,恐怕你不得不依靠自己的手卷數學函數。這裏是an example

編輯:

我在做那樣的編碼,我發現,使用writeableraster的setPixels方法是很多不是依靠的paintComponent方法,如繪製形狀更快。如果您想更確定一些,可以編寫一些函數來重複10000次操作來測試每種方法,並查看哪種方法更快完成。

此外,除了多線程外,您還可以使用java的double bufferingBufferStrategy工具在需要之前準備後續柵格。通過這種方式,每一個連續的光柵在輪到它時就被簡單地「打開」,因爲它已經被預渲染在緩衝區中。

我希望這些額外的鏈接幫助。

+0

好的,所以如果我使用fork和在繪畫過程中使用用於創建形狀的幾何算法連接,我可以足夠快地迭代以將受影響的像素添加到數組,同時將其繪製到屏幕上?在可寫入的光柵中使用setPixels方法的速度還不止是將受影響的像素存儲爲區域並將其繪製爲形狀? – StoneAgeCoder

+1

@StoneAgeCoder +1繼續嘗試學習。我剛纔編輯了我原來的答案,以解決您的問題。這回答了你的問題了嗎? – CodeMed

+0

感謝您的建議。我閱讀了兩篇文章,並測試了BufferedImage中的setPixels方法。不幸的是,當我使用可寫光柵的getData()方法時,它不能正確繪製,但是當我使用getAlphaRaster()時它工作得很好,但返回了我實際需要的灰度版本。在這之後,我只是嘗試了setRGB()方法,它看起來比使用paintComponent()方法逐個像素地填充一個矩形的速度快100倍。另外,爲了準備代碼形式的多個緩衝區,我真的需要什麼? – StoneAgeCoder