[心得] 超大型地圖的設計與原型樣品

看板GameDesign作者 (壓力太大 囧mmmmmmmmmmm)時間13年前 (2011/08/11 09:32), 編輯推噓4(4019)
留言23則, 7人參與, 最新討論串1/1
在前幾篇文章中我有提到網頁戰略遊戲的地圖設計 我想許多大型遊戲一定也都用到了類似的方法去規劃地圖在資料庫上儲存的方式 程式碼的部分我就不講解了 扣掉註解 實際有功能的程式碼為185行(沒併行) 想分享的原因其實蠻簡單的 只是想知道有哪些人也這麼做過 概念圖像下面那樣 把地圖依個人需求切割成好幾的地區存放 (?為你所設定的地圖區塊大小) (1,1)┌─┬─┬...─┐(x_end,1) │ │ │ │ (1,1*?)├─┼─┼...─┤(x_end,1*?) │ │ │ │ (1,2*?)├─┼─┼...─┤(x_end,2*?) │ │ │ │ . . . . . . . . . . . . (1,y_end)└─┴─┴...─┘(x_end,y_end) 概念: 因考慮到資料庫單一資料表的效能問題 所以地圖的資料寫入動態生成的資料表中 圖中的交會處 也就是每個資料表的交會處(邊緣) 我稱為節點 讀取時利用節點的計算來取得需要讀取的資料表 最後將資料取出排列就大公告成了 我有做地圖編輯器 所以可以動態生成存放地圖資料的資料表 這個1600萬格的地圖要花80分鐘才能跑完(InnoDB)...... 主要是寫入資料在花時間 整個陣列的產生其實只需要42秒 這是臨時的ip http://XXX.XXX.XXX.XXX/ (先拿掉) 會放個一天讓有興趣的人交流 不過全部的人共用一組資料 所以若同時很多人在操作的話 地圖的座標會跳很快或者亂跳 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.166.149

08/11 10:15, , 1F
所以有點像是做Broad-Phase?
08/11 10:15, 1F

08/11 10:25, , 2F
去查了資料 取值是用Broad Phase沒錯
08/11 10:25, 2F

08/11 10:29, , 3F
有試過建 index嗎? 有 Rtree 之類的可以用
08/11 10:29, 3F

08/11 10:40, , 4F
因為欄位複雜 所以直接放棄做索引 XDDDD
08/11 10:40, 4F

08/11 10:40, , 5F
有做過全部索引 但是效能更差
08/11 10:40, 5F
※ 編輯: cowbaying 來自: 61.227.166.149 (08/11 10:49)

08/11 11:00, , 6F
索引不管怎樣都要建 有無索引效能差很多.
08/11 11:00, 6F
※ 編輯: cowbaying 來自: 61.227.166.149 (08/11 16:50)

08/11 17:46, , 7F
我找到問題了 之前設索引時MYSQL 的快取沒有設定好
08/11 17:46, 7F

08/11 17:46, , 8F
建索引真的快蠻多的
08/11 17:46, 8F

08/11 19:15, , 9F
mysql 有針對geograph 的 plug-in 雖然我不知道在遊戲地圖上
08/11 19:15, 9F

08/11 19:15, , 10F
有沒有需要用到 FYI
08/11 19:15, 10F

08/11 19:30, , 11F
indexing + hashing + B+tree, 可以試試
08/11 19:30, 11F

08/11 21:12, , 12F
今天改良了一下 地圖資料動態產生 理論上可以無限大
08/11 21:12, 12F

08/11 21:43, , 13F
不過這樣好像沒意義了 以戰略遊戲來說可能會玩不完...
08/11 21:43, 13F

08/11 22:58, , 14F
其實這種東西結合遊戲來做的話...可以用GPU去算...保證
08/11 22:58, 14F

08/11 22:58, , 15F
不管讀寫都低於16ms
08/11 22:58, 15F

08/11 23:16, , 16F
最後資料還是要寫入硬碟吧
08/11 23:16, 16F

08/11 23:20, , 17F
我用memory engine 可以低於5ms
08/11 23:20, 17F

08/11 23:21, , 18F
其實計算出來的時間有90%都是寫入硬碟用掉的
08/11 23:21, 18F
7200轉的硬碟 平均搜尋時間大多落在12ms 再加上其他機械動作 讀寫一回大多是32ms 附近 我會把資料表做成動態生成還有一個因素 就是可以避免大量的資料寫入時資料表被鎖死的問題(同一個資料表) 雖然可以延遲寫入 但寫入的瞬間還是會卡死 不過這個問題還是要等實際跑過後再來做改善了 ※ 編輯: cowbaying 來自: 59.127.242.3 (08/11 23:38)

08/12 00:09, , 19F
資料處理的問題你已經處理得很好了
08/12 00:09, 19F

08/12 00:09, , 20F
何不把精力放在其他地方呢?
08/12 00:09, 20F

08/12 00:25, , 21F
一不小心就陷入這個有趣的問題裡了 XDDDDDDD
08/12 00:25, 21F

08/12 00:27, , 22F
因為遊戲架構的關係 幾乎全部的資料都是在地圖表裡運
08/12 00:27, 22F

08/12 00:27, , 23F
算的 所以也算是個重點項目
08/12 00:27, 23F
文章代碼(AID): #1EGp4pGX (GameDesign)