我想創建Conway's Game of Life。我讀了Java 2d API,但Graphics類只提供的paintComponent上的drawRect()
和fillRect()
的方法。我的意思是這些矩形不能單獨作爲對象來處理,也就是說,我可以檢查哪一個與附近的相關。
所以我想問問如何製作正方形,以便它們可以單獨處理並且動態創建網格?動態創建矩形網格
Q
動態創建矩形網格
1
A
回答
2
創建一個需要所有屬性的Sqaure類。 創建代表電路板的Square對象列表。 在JPanel的繪製方法中,迭代Square對象的列表,根據其屬性繪製每個對象的列表。
儘可能保持您的顯示代碼與您的邏輯分開 - 這幾乎總是一個好主意。
1
我想提出一個完全不同的解決方案。通常必須將生成的圖形視爲僅輸出,這意味着,您不想從圖形中讀取狀態,因爲這太慢了。 你必須保持其他地方的單元格狀態,就像在一個二維數組中。例如, boolean [] []或int [] []。 然後你需要一個「渲染」的排序方法,將你的單元格的值,並繪製出來。
但我想提出一個更酷的方式來做到這一點。而不是保留二維數組,使用BufferedImage組成的(一維)數組。通常,每個「像素」是該數組中的一個元素。然後使用drawImage繪製該圖像,並向上縮放該圖像。這可能表現非常好。您可能可以實時獲得整個畫面。
BufferedImage有很多不同的方法,起初有點混亂。最後你會在某處找到DataBuffer。你需要訪問int []。然後,設置單元格:data [y * width + x] = -1; (白色單元格) 以清除單元格:data [y * width + x] = 0; (黑色單元格) (例如 - 反之亦然 - 或任何其他顏色)。
你可以真的很喜歡這個。您可以使用各種偏移量變量,而不必一直計算y * width + x,並對其進行優化。事實上,我儘可能地讓它變得如此高效,以至於你可以超越另一個用C++編寫完全相同的程序的人。
相關問題
- 1. UWP創建動態矩形
- 2. 動態創建網格EXTJS
- 3. 動態創建網格
- 4. 動態創建WPF網格
- 5. 在WPF中爲動態創建的矩形創建_MouseLeftButtonDown
- 6. KineticJs - 當動態創建矩形時,其背後的矩形自身拖動
- 7. 爲網頁動態創建R圖形
- 8. 在HTML5動態創建的畫布創建矩形,現在想加手形光標只爲矩形
- 9. d3.js構建一個矩形網格
- 10. 矩形網格中矩形網格的最小數量[JAVA]
- 11. 不能創建動態網格
- 12. 使用列表動態創建網格
- 13. 使用Javascript創建動態網格divs
- 14. 使用動態列創建GXT網格
- 15. 使用面板創建動態網格
- 16. 創建動態網格控件
- 17. 如何創建動態網格
- 18. wpf創建動態可點擊「網格」
- 19. 如何創建動態停止統一滾動矩形?
- 20. 拖動一個網格內的矩形
- 21. 如何在矩形中創建矩形?
- 22. JS:如何創建一個填充矩形的10x10網格?
- 23. 在leaflet.js上創建一個矩形網格地圖
- 24. PyQt5動態添加矩形到QML網格
- 25. 用Angular指令構建動態矩形
- 26. KineticJS - 動態創建形狀
- 27. 創建動態圖形
- 28. 繪製矩形和網格
- 29. 網格上的矩形
- 30. Ui網格:我如何動態創建多個UI網格
我如何讓廣場可選?我可以在我製作的Square上實現MouseListener接口嗎? – prometheuspk
你可以通過JPanel實現MouseListener,獲取點擊的共同點並檢查這些共同點是否在你的Square對象中(我建議在渲染時設置Square對象的共同點他們或者更好,在創建Squares時設置合作伙伴,然後使用這些合作伙伴選擇展示位置) –
好的建議。對於像生命遊戲這樣的東西來說,通過座標檢查找出選定的正方形會更好,而不是試圖用面板上的組件(如按鈕或標籤)表示所有東西。它會更敏捷,更輕量。請務必閱讀模型視圖控制器模式,通常縮寫爲MVC)。您的網格是模型,可視化是視圖,同時控制器通過響應鼠標事件。 –