今天下午参加了公司兄弟项目组的一个技术分享会,主题是关于MMORPG游戏中的技能系统设计的,有几点体会和思考,先记录下来了!
(1)技能施法时,client只有一个上行的请求施法包,后续施法的过程全由server来驱动下发施法各阶段的结果信息,如吟唱、效果伤害、命中信息等等;
(2)弹道类技能是由server计算飞行时间,并不考虑飞行后的轨迹,若此时目标有移动,则client会做目标跟随的处理;
(3)技能学习:由秘籍来获得技能,一本秘籍包含多个技能,被动技能不影响主动技能的属性;
(4)Buff系统与技能系统是相互独立的,相互之间有接口各自的进行访问;
(5)玩家施法作群攻目标选定时,也是由server来完成,这时是从玩家自己的视野里搜索,而无需再搜一次动态区域(格子32*32);
(6)技能效果由一个主效果+N个Buff效果组成;
(7)Buff对象区分玩家和怪物,其存储结构独立出来放在内存池中,在施法者需要时再根据目标类型来添加;
(8)特别小心:在作技能效果计算时,尽量避免有轮循的处理,因为,这个这个很耗CPU;
思考题:关于技能引发的位置同步问题
(1)对于改变目标(玩家)移动速度的技能,可能会带来位置不同步的问题,即server下发速度改变的包时,目标玩家可能正在移动,从而导致server和client的位置不一致?
答:对于这个问题,一般是通过移动系统自身的位置同步策略来解决的,即移动系统发现client和server位置不一致时,通过一定的策略来补偿速度慢的一方,从而在目标玩家在接来的一定时间内达到位置平衡。
(2)类似性质的问题还有给目标加冰冻、定身等Buff,也可能带来位置不同步的问题?
答:这个问题暂也还没有好的解决方案,目前的做法是当目标中定身Buff时,client立即表现定身,即定在原地,并将此时的位置信息带给server,server检验合法后设置这个位置,解冻后client为继续玩家移动(若玩家是移动中被定身住的话)。