关于被附加debuff后的特效,代码上应该如何组织

2018-05-14
问:

在项目里经常会有被某种效果附加上的情况出现,比如冰冻和灼烧。那么在代码逻辑中一般是怎么体现这一种情况的呢?是通过一个列表去存,然后每次进行遍历然后去在相应的对象的节点下添加这么一个特效的效果还是说首先预先写好这么一个特效的开关,在每次起效时打开?还是说有更加巧妙的处理方案呢?另外如果shader去体现这么一种冰冻或者灼烧的效果。这个shader是一开始就附加在贴图上的还是如何处理的呢?

邪让多杰:

特效最主要的就是流畅。所以代码应为流畅服务。
基础:特效底层
1. 创建一个池子,所有的特效都是池子来回。
2. 特效挂在节点下,由美术调整好大小节点后,存储在序列化的表中。
3. 角色被初始化后,所有有用的节点都被以字典的方式存下来。
4. 当需要显示特效时,就特效直接移动到节点下。播放完拿走。。中间不存在从硬盘加载东西的过程。

上面是的特效的,应该与debuff独立
中级:buff逻辑
而debuff属于buff,起本质就是在一段时间内拥有某种状态。
完全可以由状态机控制,
当状态开启,buff上去,
状态过程,buff刷新,同时检测是否buff被去掉,以及通知界面更新。
当buff去掉,就去掉特效
这样结构就很清晰了。

高级:buff逻辑配置化

然后大部分buff走通用流程,而特殊的buff走配置流程。
配置流程可以走行为树,也可以走slua或C#light等热更新代码,使得buff在线上可直接维护。

Glory:

我更倾向用开关调控吧。相比来说简洁一些。遍历的运算量有点大吧。如果是手游这种代码运行效率应该还是要很着重考虑的。

七宝:

预先写好一个特效的开挂,到时候直接添加调整吧

JaneEyre:

应该有更巧妙的处理方案吧~毕竟特效开挂在实际用上,还是需要调整很多,会增加工作量的