游戏思考系列02:技能伤害计算流程(不涉及buff)


抱歉这里没代码或比较少,因为工作都是很晚回来,现在写的时候都是晚上11点54了

一、题外话:

1)技能伤害和特效表现的分离

  • 说明

技能伤害的特效表现和数值基本是分离,也就是说有特效并不一定伤害计算就打出来,比如说你比较卡的时候,虽然施法表现已经完成结束,但是没有伤害,或伤害很久才同步下来(也有为了战斗手感才会先让客户端表现效果),更白话的解释:特效和动作是一件事儿,伤害计算 和冒数字是另一件事儿。只不过,当角色放技能的时候,这两件事一起发生而已。

  • 好处
1)代码清晰,解耦(比如炉石大家肯定都玩过吧,你可以连续出几张牌然后点结束回合,等着动画序列慢慢播。
从这就可以看出来,炉石是做了逻辑层和显示层的分离)
2)断线重连好做,把数据拿到了刷新显示就可以

二、流程(举例:逻辑和业务分开:技能可以分为四个阶段)

举例:LOL日炎灼烧效果,每0.5s产生一次伤害

1)客户端开始施法,技能前摇。此时通知服务器同步进入施法流程

具体:判断角色是否可以释放这个技能(比如死没死,有没有升级成神话大日炎,有没有被奥恩强化过,是否卖了这个装备)

2)客户端开始分段施法,每一阶段都要和服务器做同步。主要是为了防外挂,比如一些穿墙挂、瞬移挂等。

具体:客户端播放特效,开始计时,在动作和特效约好的时间到来时,播放特效,开始计时

3)在施法过程中或者施法结束的时候,服务器进行同步的伤害计算发送给客户端,然后客户端显示一些伤害的效果和伤害的数字等

具体:在特效和你约定好的时间到来时,开始造成伤害

(1)穿日炎的英雄旁边有小兵、野怪或对面英雄,每次伤害间隔0.5s
(2)每次造成伤害进行如下判断
①判断范围内有没有单位
②单位是否死亡
③单位和玩家的阵营关系
④判断敌对单位是否可被锁定(就是可以被角色攻击吗,是不是在无敌状态),
something else
(3)根据双方的即时属性计算瞬间伤害

4)施法结束,客户端和服务器同步

服务器计算好伤害,传给客户端,客户端显示被击特效、伤害数字UI、被击音效等

三、补充

1)这里客户端不需要每一帧和服务器同步,只需要再某些关键帧的时候同步这些数据就可以了

四、不分离表现和逻辑分开的流程

1)用美术资源碰撞的方式判断伤害的造成

2)那就是碰撞后开始计算伤害,也就是上面的第3)步

3)并且,为了避免未来优化导致特效资源修改,建议碰撞块单独做,不要用特效粒子本身来做

猜你喜欢

转载自blog.csdn.net/weixin_43679037/article/details/121622649