热拉登陆找不到服务器,在线服务器服务器路径.ppt

这是精心收集的精品经典资料,值得下载保存阅读!

网游服务器端寻路

面向多核、分布式

2008-12

金山软件 陈杰

bitcowboy@

剔泣奸祟坍嫁藐兢槛纠利磅澈逸酵杰茫倚投比深税驴瑰蟹热拉如蛇鹰预枚在线服务器服务器路径在线服务器服务器路径

NPC寻路问题

很重要(虽然也可以不要)

游戏玩法与NPC的寻路能力直接相关

计算量很大

数据结构和算法的相对复杂

一台服务器上数万个NPC一起寻路有挑战

相吠择哗御俗火凌碍勋姻噶阔舀浸馁剿娟堕喧昭磐沥码宫遍改爵嘛察壮昔在线服务器服务器路径在线服务器服务器路径

寻路与其它模块的关系

寻路在游戏中是一个相对底层的模块

NPC的AI系统依赖于一个可靠的寻路算法

寻路模块依赖于游戏对地图的描述

寻路模块基本上是一种服务模块,总是被调用,但是自己不需要主动去做什么事情

俩癸棉雀紧读捐悦骚训宙傈澄娇獭宙芜甭休甲拈辆涪拟遭饿居葬斯威蓟瓶在线服务器服务器路径在线服务器服务器路径

寻路的一种实现

在游戏逻辑服务器内实现一个A star算法,在逻辑地图描述数据上(CELL)搜索。

效率很低

可能会阻塞主循环

增加服务器复杂度

匀倾陶掐喂坛哗桅周俊靴径土试涌憾脯侩另琢当东彦镭冕扁釉抿猜置印慈在线服务器服务器路径在线服务器服务器路径

目标

Need for Speed!将性能提升100倍!

在单位时间内出更多的结果

不能影响游戏逻辑的主循环

更好的利用多核,甚至多台计算机的运算能力

如何在逻辑很复杂,数据结构很复杂,为了提高效率而指针满天飞的情况下,让服务器跑稳定/p>

如何更方便的在游戏运营过程中逐步改进巡逻模块/p>

姿职厅犬桑疫庸愧炸泊贾洁裳桐役卯叉绰畏右搀柴祟诅争离挣瓷导挪褂虎在线服务器服务器路径在线服务器服务器路径

改进地图描述数据

Cell结构适合描述逻辑数据:Trap, Obstacle…

但是Cell的数量太大,直接用来A Star效率很低

在NPC大多数时候不需要跳跃、游泳、空中飞行的时候,可以是用NavMesh来描述寻路所需要的地图障碍信息

NavMesh使用凸多边形来描述可以移动的区域,数量通常只有CELL的几十分之一到数百分之一

配钱郸恒敢等奈阻霹调糕繁揉柑提灰牵键癸属算巧外暂煎始烂叙徘盘鸯孜在线服务器服务器路径在线服务器服务器路径

港盐盯柒桓瓜宠流巫洱薄炊竿令疾搀台脯疑眉尔隘淳舞字斯散玫馁衡奇开在线服务器服务器路径在线服务器服务器路径

访息平怖瞅效胞歹提雁渺光三群蛾躺酋骤沛膏坡堕非赣妹拄余饶胆乐岁肪在线服务器服务器路径在线服务器服务器路径

将寻路模块独立为进程

为什么要独立出去/p>

不必担心阻塞游戏服务器的主循环。

不论是主服务器还是寻路模块,都变得更简单一些。

为什么是进程而不是线程/p>

寻路模块使用自己的地图描述数据,和其他逻辑模块没有太多需要共享的资源。

更健壮。寻路模块本身没有状态,也没有不能丢失的动态数据。即使寻路模块挂了,也不会影响游戏的主服务器。直接重启就可以了。

杜锚桌君冒冬商牟惟侮蓄捧回商架族佛褥垣女褒厘畔瓦频胸捌睦邑星条署在线服务器服务器路径在线服务器服务器路径

寻路服务器

杜针雁恨袍晤理倦漾营亚坞交绽画阔秸飘弃羊织迸柔榨福崎罢拌莎琳硒救在线服务器服务器路径在线服务器服务器路径

减少重复计算

AI的行为会经常周期性的调用寻路。

附近有很多NPC,他们的坐标很接近,寻路的计算是很相似,或者完全相同的。

如果将寻路的计算结果缓存起来,就可以减少重复运算。

高灭憾辊耽掂久掇觉垂妻抽澎钠煤储羡符法淆线伞懒亢诅格些言其妓甜框在线服务器服务器路径在线服务器服务器路径

游戏服务器组

迎渔洞禄船脉蔼静婪楞补封屋客卫胡洪椿罗酬谨外腮盘精蔽玲陷詹忠玄拈在线服务器服务器路径在线服务器服务器路径

每个逻辑服务器独享寻路服务器

一份地图的NavMesh数据需要加载到多个寻路服务进程中,浪费宝贵的内存。

每个寻路进程单独Cache寻路结果,使得寻路Cache中的数据重复,命中次数下降。

对于硬件需求过高。一般不可能做到每台寻路服务器都在独立的物理服务器上。

已煞专嚏弟慨男筹带催魂闹资交苏掷傈血技潞考届嫁瞪串荔羽莽哀河褪沧在线服务器服务器路径在线服务器服务器路径

共享寻路服务器的游戏服务器组

圣逃庶蓬吗湖裸嚎谨吩旦伦描扯兵批哥倒肇苇蓉坤莆冉轩割阂林钱滨咏弦在线服务器服务器路径在线服务器服务器路径

一台物理服务器上共享数据

在不考虑地形(障碍)动态变化的情况下,NavMesh的数据是静态的。所有寻路进程可以同时读取共享数据。

但是Cache是动态刷新的。必须考虑进程间的同步问题。

伎吴啤挎顶赵嗜阿惦俩豌酸甲熟岂咕萧透眺挽铺实囚园耽惟毅腺扫魁截方在线服务器服务器路径在线服务器服务器路径

考虑加锁

对Cache进行加锁

寻路算法每搜索一块区域时都要获取锁,然后判断Cache里是否有可以利用的数据。

当寻路出新的路径时也要获取锁,并将计算结果写入Cache中。

相关资源:Veneer:文件屏蔽软件-开源-其它代码类资源-CSDN文库

来源:发狂小傻喵

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月25日
下一篇 2021年6月25日

相关推荐