作者cowbaying (压力太大 囧mmmmmmmmmmm)
看板GameDesign
标题[心得] 超大型地图的设计与原型样品
时间Thu Aug 11 09:32:32 2011
在前几篇文章中我有提到网页战略游戏的地图设计
我想许多大型游戏一定也都用到了类似的方法去规划地图在资料库上储存的方式
程式码的部分我就不讲解了
扣掉注解
实际有功能的程式码为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
1F:推 azureblaze:所以有点像是做Broad-Phase? 08/11 10:15
2F:→ cowbaying:去查了资料 取值是用Broad Phase没错 08/11 10:25
3F:→ adxis:有试过建 index吗? 有 Rtree 之类的可以用 08/11 10:29
4F:→ cowbaying:因为栏位复杂 所以直接放弃做索引 XDDDD 08/11 10:40
5F:→ cowbaying:有做过全部索引 但是效能更差 08/11 10:40
※ 编辑: cowbaying 来自: 61.227.166.149 (08/11 10:49)
6F:→ rofellosx:索引不管怎样都要建 有无索引效能差很多. 08/11 11:00
※ 编辑: cowbaying 来自: 61.227.166.149 (08/11 16:50)
7F:→ cowbaying:我找到问题了 之前设索引时MYSQL 的快取没有设定好 08/11 17:46
8F:→ cowbaying:建索引真的快蛮多的 08/11 17:46
9F:→ adxis:mysql 有针对geograph 的 plug-in 虽然我不知道在游戏地图上 08/11 19:15
10F:→ adxis:有没有需要用到 FYI 08/11 19:15
11F:推 akilight:indexing + hashing + B+tree, 可以试试 08/11 19:30
12F:→ cowbaying:今天改良了一下 地图资料动态产生 理论上可以无限大 08/11 21:12
13F:→ cowbaying:不过这样好像没意义了 以战略游戏来说可能会玩不完... 08/11 21:43
14F:推 darkflier:其实这种东西结合游戏来做的话...可以用GPU去算...保证 08/11 22:58
15F:→ darkflier:不管读写都低於16ms 08/11 22:58
16F:→ cowbaying:最後资料还是要写入硬碟吧 08/11 23:16
17F:→ cowbaying:我用memory engine 可以低於5ms 08/11 23:20
18F:→ cowbaying:其实计算出来的时间有90%都是写入硬碟用掉的 08/11 23:21
7200转的硬碟 平均搜寻时间大多落在12ms
再加上其他机械动作
读写一回大多是32ms 附近
我会把资料表做成动态生成还有一个因素
就是可以避免大量的资料写入时资料表被锁死的问题(同一个资料表)
虽然可以延迟写入
但写入的瞬间还是会卡死
不过这个问题还是要等实际跑过後再来做改善了
※ 编辑: cowbaying 来自: 59.127.242.3 (08/11 23:38)
19F:推 littlethe:资料处理的问题你已经处理得很好了 08/12 00:09
20F:→ littlethe:何不把精力放在其他地方呢? 08/12 00:09
21F:→ cowbaying:一不小心就陷入这个有趣的问题里了 XDDDDDDD 08/12 00:25
22F:→ cowbaying:因为游戏架构的关系 几乎全部的资料都是在地图表里运 08/12 00:27
23F:→ cowbaying:算的 所以也算是个重点项目 08/12 00:27