决战平安京地图实现原理分析带给大家,这款网易moba手游设计的地图真的很牛逼,因为不管是我方还是敌方,都属于最下面的蓝色方。(贴吧@Amber分享)
平安京的地图
作为一个比较喜欢moba类游戏的玩家,我以前玩过dota、lol、300英雄、三国杀英雄传、王者荣耀等多款moba游戏,仅从地图的角度来看,这些游戏可以分为两大类。
第一类是以dota、lol为首的比较传统的moba游戏,dota分天辉夜魇,lol分红蓝色方。除了战争迷雾以外,双方的地图并没有其它的区别,也就是说,如果你是夜魇方或者红色方,那么在你看来,你的出生点都位于地图的右上角,你的敌人在你的左下角。由于人类的生理构造,所以大多数人在蓝色方会获得更好的操作体验,不过这些游戏是使用鼠标和键盘来操作,非常灵活,所以即使有统计说蓝色方胜率高于红色方,我们也不能贸然认定这个胜率差距来自操作习惯,毕竟地图构造以及bp顺序也都会影响双方的胜率。
第二类自然就是以王者荣耀为首的手游moba游戏,这类游戏需要占用一部分手机屏幕用来给方向盘以及技能键提供空间,而通常方向盘和技能键放在屏幕下方比较方便操作。如果王者荣耀依然像lol一样,不对地图作任何处理,那么红色方的游戏体验将会变得极差,因为与他们对线的英雄都被自己的手指挡住了。所以如果你是红色方,那么在你看来,地图会被做一点小小的处理,也就是旋转180°,这样红色方也在下方了,操作上保证了双方的基本公平,所以有一个有趣的现象是,有时候大龙在上路,有时候在下路,但是下路的buff却总是红buff。
决战平安京则是第三类,一种我以前从来没有见过甚至刚开始不能理解的模式,不仅能保证玩家的出生点永远在下方,而且还能保证大龙永远在上路,小龙永远在下路。当然,大龙在上路,小龙在下路这对游戏体验没有太多实际意义,真正的意义是,在保证玩家出生点永远处于下方的同时,让玩家的下路,同时也是敌方的下路,这样就不会出现我方上路1打2的尴尬局面。当我第一次在网上见到有人说平安京有这个机制的时候,我还没有激活码,觉得这简直不可思议,后来亲自进入游戏体验了一番,发现确实是这样,然后我自己想了想,总结出了这种机制的实现原理,并写了个小程序来模拟,接下来就分析下三种类型的具体实现。
首先是传统模式,这种模式下,红蓝双方从服务器接受到的各种坐标(基地、英雄、野怪)完全一致,只是战争迷雾不一致而已:
(左方的窗口为蓝色方,右边的窗口为红色方,红色大方块表示敌方基地,蓝色大方块表示我方基地,红蓝小方块分别表示红蓝buff,紫色表示大龙,棕褐色表示小龙,天蓝色表示我方英雄,粉红色表示敌方英雄,其它模式也一样)
对比上下两幅图(当然,不要吐槽这个图很简陋,我只是尝试从安装包中提取地图文件失败),我们可以发现,当蓝色方英雄朝着地图的上方移动的时候,红色方的视角里,他也是朝着上方移动,这是所谓的不对地图本身作任何处理,如果没有战争迷雾,双方的眼中的地图是完全一致的。
第二种模式则是王者荣耀的模式,这种模式下,红色方的视角中,整个地图被旋转了180°,当然这个旋转操作发生在服务器上还是红色方的客户端上我们就不得而知了(我选择的是让它发生在服务器上):
同样对比上下两幅图,我们发现,当蓝色方的英雄朝着上方移动时,红色方的视角中,他却在往下方移动,同时,红色方的视角中,大龙位于下路。这样,蓝色方的上路实际上就是红色方的下路。
这个旋转操作是非常简单的,比如蓝色方英雄的位置,在红色方的眼里,处于其实际位置的中心对称的位置,当然这个中心对称的点是地图的中点。
如果蓝色方英雄的位置是(x,y),那么换算到红色方的视角中就是(w-x,w-y),w是地图的大小,假设地图是正方形。
这个换算公式的正确性是可以以数学手段证明的,即:中心对称的两个点连线经过对称中心且被对称中心平分,证明过程比较简单,这里省略证明过程。
第三种模式则是平安京的模式,红色方的视角中,地图被做了如下处理:首先将地图旋转180°,然后以中路为对称轴,将所有的物体的坐标转换为其对称点的坐标:
同样对比两幅图,当蓝色方英雄朝上方移动时,红色方的视角中,他却在朝左方移动。同时,蓝色方的上路,对于红色方来说依然是上路。双方眼中的大龙都在上路,小龙都在下路。
游戏中有这么几个现象:
1.下路野区是随机刷新,该野怪buff的缺口位置有时候朝向左下,有时候又朝向右下。
2.对于中路英雄来说,有个不能还手的野怪,永远在左手方的位置。
3.中路一塔有时候贴着左边的墙,有时候贴着右边。
4.lol和王者荣耀中,大龙小龙的位置实际上都属于其中一方的半场,而平安京中大小龙则是绝对中立的,处于一条中线上(只有这样才能保证每次大小龙的位置都是不变的)。
可以看出,这种模式能保证两条边路,单人线对上单人线,双人线对上双人线。不过这种做法到底好不好,现在还不好说,一切看最终测试结果。
前面我们讨论了中心对称的坐标计算方式,现在我们说一说轴对称如何计算:
假设原坐标是(x,y),以中路为对称轴,那么其对称点的坐标是(w-y,w-x),这个计算公式的合理性同样可以利用轴对称的性质来进行数学上的证明,这里同样不展开讨论。
我们说过,地图处理分两步,先中心对称,再轴对称,首先中心对称:
x1=w-x
y1=w-y
然后轴对称:
x2=w-y1
y2=w-x1
两组公式加起来就是:
x2=y
y2=x
也就是说,红色方的地图处理时,直接交换x和y坐标即可。
总结一下,在已知平安京的这种地图处理方式的情况下,将其实现特别简单。不过能想到这种处理方式,真的是非常天才。我不知道这是不是第一款这样处理地图的游戏,但是我确实是从来没见过。希望网易的设计师能继续表现他们天才的一面,为我们带来一个更好玩的手游moba游戏,用自己的实力来改变目前王者荣耀一家独大的局面。