我正在基於我的世界的基於java的LWJGL遊戲。我正在努力進行地形管理,因爲世界可以隨着您的探索而擴展。如果將地形存儲在塊對象中,並且您需要知道要從渲染列表中刪除哪些塊,要添加哪些塊以及根據玩家的xyz位置生成哪些塊,您將如何管理地形?在基於體素的遊戲中的塊管理
回答
我使用高分辨率的醫學體素數據並使用八叉樹以高效的方式進行存儲。
你不能真正使用八叉樹,因爲你想要動態擴展地形(八叉樹在查找時極其快速,但在構建/擴展時速度非常慢)。
我建議你嘗試使用HashMap,如果你爲Vector3提供了一個好的散列函數,那麼對於任何數量的塊(理論上O(1))來說,查找時間將幾乎相同,但這只是最好的情況。 )。
然後,您可以通過遍歷映射鍵來移除所有看不見的映射條目(這可以在處理所有加載/卸載的輔助線程上完成)。
希望這有助於
〜洛基
感謝您的回答! – Mad3ngineer 2012-09-20 20:26:49
我發現最好的辦法是將每個世界部分分割開來,這樣一個塊有一個'16x16x16'塊,然後一個區域有一個'16x16x16'塊,然後這個世界可以有一個' 117188x1x117188'區域,每個羅盤方向總共有'30000128'個區塊(類似於我的世界)。我正在做的遊戲的陣列大小略有不同,但概念是一樣的。 – 2015-09-24 16:38:10
而當我說數組的意思是'Block [] [] [] blocks = new Block [16] [16] [16];',而不是散列表或數組列表;因爲我已經嘗試過這些,並且它們似乎比傳統的三維陣列慢得多。 – 2015-09-24 16:39:18
- 1. 基於Java opengl塊的遊戲性能
- 2. 基於Servlet的基於遊戲的遊戲
- 3. 基於文本的遊戲的基本保存遊戲
- 4. 基於級別的遊戲
- 5. 基於文本的遊戲
- 6. 基於PHP的遊戲
- 7. 在基於文本的遊戲中處理時間(Java)
- 8. 遊戲中的等級管理
- 9. JavaScript遊戲中的鼠標管理
- 10. 基於條件的遊戲匹配 - 遊戲中心iOS
- 11. ios基於遊戲中心的遊戲調試和開發
- 12. 基於回合的多人遊戲與遊戲中心
- 13. 基於在線多人遊戲的遊戲服務器技術?
- 14. 在cocos2d中管理遊戲階段
- 15. 在遊戲中管理大圖像
- 16. 適用於基於回合的遊戲的iOS SpriteKit物理?
- 17. Windows 8中的鍵盤處理基於XAML的遊戲
- 18. 遊戲畫面管理
- 19. 遊戲狀態管理Android?
- 20. XNA遊戲狀態管理
- 21. Java遊戲狀態管理
- 22. 無法管理運行2人遊戲的Python遊戲
- 23. 遍歷基於遊戲
- 24. 基於圖塊的側滾動玩遊戲的教程?
- 25. 在Flash遊戲中管理遊戲關卡的最佳方式是什麼?
- 26. 磚塊遊戲的JavaScript遊戲引擎
- 27. 液體物理遊戲
- 28. 基於多人遊戲的文本遊戲
- 29. 聲音管理器的RTS遊戲
- 30. iPad的遊戲時間管理
哪一部分導致您的問題?事實上,這個問題似乎過於寬泛。 – biziclop 2012-07-07 16:27:31
讓我難以接受的部分是如何以一種方式存儲塊,以便您可以輕鬆判斷它們是否已渲染,並在距離較遠時將其移除,或者在距離較近時將其添加。這很難做到,因爲你無法真正將數組用於無限的世界,並且Arraylist很難找出索引中的哪個塊到達哪個xyz位置。 – Mad3ngineer 2012-07-07 16:51:51
我現在回來了,我明白了......我被擊倒的原因是我很擔心表演。 – Mad3ngineer 2012-10-20 19:33:53