游戏服务端开发:如何精确计算MMO游戏技能攻击区域?
·
http://www.gameres.com/493846.html
GameRes游资网授权发布 文 / 肥宝传说之路
游戏技能攻击区域的计算,关乎服务端的效率。需要确保正确,简洁地计算攻击区域,才能快速寻找攻击对象。
今天只讨论地图上距离的问题。
一般情况下攻击区域分为以下几种:
1.点对点,对个人进行攻击
2.射线攻击,其实就是矩形区域
3.扇形攻击
4.圆形攻击
当然,还有其他情况,例如多区域和其他奇奇怪怪的形状。不过考虑的实际观赏价值,和精度的问题,多区域,只考虑圆形和扇形,其他形状也不考虑了。
释放技能需要几个事物,攻击者,主要被攻击者(也可能是攻击地点),其他围观的群众
下面再细细讲解:
1.点对点的攻击
这个是最简单的,只要达到技能释放的距离,就可以释放。只要攻击者和被攻击者的位置小于配置的skillDistance即可。
2.射线攻击,矩形区域
怪物向目标喷出一条长长的火线,在火线上的玩家受到攻击,如下图。A向B喷火。同时也要检测周围的玩家是否中招

判断一个点是否在矩形内是很简单的,如下:
但这个是在矩形的边跟坐标轴平行的情况下的。如果攻击者的攻击方向跟坐标轴不平行,如上图,就无法计算了
怎么办呢,如果能转换成相对坐标就简单很多了。相对坐标的知识
要从绝对坐标转换成相对坐标,需要确定相对坐标的原点和x轴方向。
原点是A点,也就是attackerPoint,X轴方向从A点指向B点。现在是求图中C点的相对坐标。
ABC三点确定位置。根据余弦定理可以求出角CAB的余弦,从而可以求出相对坐标。然后在判断是否在矩阵内。

3.扇形区域
攻击者对前方角度α,长度为L的区域进行攻击。如下图,攻击目标为B,要计算旁边的C是否也受到攻击
扇形,当然是用极坐标最方便,判断一下距离,在半径范围内,然后判断一下角度是否适合。
策划配置:扇形半径R和扇形总角度β
所以构建以A为原点的极坐标。根据中心线的角度α,求出扇形的角度范围为[α-β/2,α+β]。再求出C点的极坐标进行比较

今天发现还有一种方法,就是利用向量的点积,可以百度一下。
对于扇形计算面积的优化,可以参考这里
再说一下多个扇形的情况
分开算就行了,用个for循环,每个扇形分别计算。
4.圆形区域,圆形其实是最简单的了。

判断是否在攻击者半径范围内就行了。

对于多个圆形区域的计算
本质上还是一样,用一个for循环,计算出圆心的位置,然后计算点到圆心的距离就完成了。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)