我正在基於我的世界的基於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. 基於文本的遊戲
- 2. 在基於文本的遊戲中處理時間(Java)
- 3. 基於在線多人遊戲的遊戲服務器技術?
- 4. 基於回合的多人遊戲與遊戲中心
- 5. JavaScript遊戲中的鼠標管理
- 6. 遊戲中的等級管理
- 7. 在遊戲中管理大圖像
- 8. 在cocos2d中管理遊戲階段
- 9. XNA遊戲狀態管理
- 10. 遊戲畫面管理
- 11. 遍歷基於遊戲
- 12. 基於圖塊的側滾動玩遊戲的教程?
- 13. 磚塊遊戲的JavaScript遊戲引擎
- 14. iPad的遊戲時間管理
- 15. 製作基於數學的遊戲
- 16. 基於gameloop的cocos2d遊戲示例?
- 17. OpenFeint基於回合的多人遊戲
- 18. 基於拖放的HTML5遊戲
- 19. 基於文本的瀏覽器遊戲
- 20. 構建基於iOS的地圖遊戲
- 21. scala基於文本的冒險遊戲
- 22. 基於Ogre3D引擎的開源遊戲?
- 23. C#基於文本的遊戲項目
- 24. REST基於WebAPI的遊戲服務器
- 25. 基於組件的遊戲實體和類型檢查
- 26. Android中的像素遊戲
- 27. 需要關於如何在Skiller回合制遊戲中管理遊戲物品的指導
- 28. 向遊戲資源管理器添加遊戲
- 29. 基於物理的動畫遊戲開發者
- 30. 基於批處理的視頻遊戲問題!
哪一部分導致您的問題?事實上,這個問題似乎過於寬泛。 – biziclop 2012-07-07 16:27:31
讓我難以接受的部分是如何以一種方式存儲塊,以便您可以輕鬆判斷它們是否已渲染,並在距離較遠時將其移除,或者在距離較近時將其添加。這很難做到,因爲你無法真正將數組用於無限的世界,並且Arraylist很難找出索引中的哪個塊到達哪個xyz位置。 – Mad3ngineer 2012-07-07 16:51:51
我現在回來了,我明白了......我被擊倒的原因是我很擔心表演。 – Mad3ngineer 2012-10-20 19:33:53