我就随便一写,你也就随便一看吧。
 
  1. 什么是BUFF?
 
或许直接回答这个问题,那么你收获到的答案将是五花八门的。这个问题暂时放下不谈,我们可以去看其他的游戏应该是怎么设计的。
我经常玩的游戏里边BUFF提现的比较明显的,可能只有英雄联盟了,如果你不熟悉这个游戏,我也会对于每一个状态做出解释,所以我想我们还是可以讨论到一块去的。
先整理一下,游戏里边可能会被认为是做Buff或者你也觉得那个可能并不是个BUFF的东西全都收集起来,然后逐个来分析。
 
蓝Buff(提高回蓝速度,减少CD):我想首先应该拿出来说的就是这个了。当你身上持有这个Buff的时候,你将会持续的加快回蓝速度,并且,你的技能的CD时间会变短。从这个地方我们不难看出BUFF的基本作用就是#提高回蓝量,减少CD时间#。
 
红Buff(攻击别人时,别人会持续掉血):这个还相对特殊一些,因为这个BUFF是提高伤害的,他时怎么提高伤害的呢?如果你携带这个BUFF普通攻击或者使用某些可以出发特效的攻击,就可以给对方添加一个持续伤害的BUFF(隔一段时间掉血的),从而提高伤害输出。BUFF可以#响应普通攻击#。
 
女妖面纱(阻挡下一个技能):这个你可能觉得并不算是一个BUFF,他属于一个技能的特效。这个我们可能真的比较难定义,毕竟都可以实现。逻辑上呢,也都可以说的过去。那么我们就看一下究竟怎么来处理比较方便。就算不是,我们也可以看一下BUFF系统有没有类似的需求。BUFF可以#响应技能触发#
 
莫甘娜的E(免疫所有的魔法效果):收到魔法伤害时,护盾值可以替换血量消耗。可以让所有的魔法效果失效。BUFF可以#响应血量消耗# #响应技能触发,并使之失效#
 
引燃(持续伤害):接受这个BUFF的时候,你的血量就会在一段时间内,持续掉血,一秒掉个N多滴。并且,会添加一层重伤效果。BUFF可以#修改自身血量#。
 
重伤(回血效果减半):接受这个效果的时候,再调用回血的逻辑时,回血的数量将减少一半。BUFF可以#可以响应加血逻辑#
 
禁锢(没有办法移动):接受这个效果之后,你将不可以移动,只能呆在原地。BUFF可以#禁止本身的某一段逻辑运行#
 
眩晕(没有办法移动,并且自己也没有办法主动普通和大部分其他效果):接受这个效果时,你将不可以移动,并且大部分普工和技能没有办法触发,当然也有例外,比如说蛮王的R可以在眩晕的时候主动开启。BUFF可以#禁止普攻,禁止技能释放#
 
减速(没啥好说的):就是减速。BUFF可以#降低自身移动速度#
 
减伤(自己的输出会降低):就是,物理输出或者魔法输出会得到对应的降低#可以参与到输出的逻辑#
 
净化(解除恶意效果):禁锢、减速(这个记不清有没有,姑且这么写吧)、中毒、重伤、持续掉血等等。那么这个属于BUFF吗?我个人认为不是的,但是这个肯定跟BUFF有关系,姑且列上来。BUFF系统可以#根据类型消除恶意的BUFF#
 
水银饰带(解除眩晕):可以根据消除某一个固定类型的BUFF。BUFF系统可以根据#消除禁锢类型的BUFF#
 
……
 
其实可以分析还有很多。姑且先说这么几个吧,然后总结一下BUFF究竟是什么。
除了女妖面纱是永久存在的以外(净化和水银饰带属于技能),其他都是在几秒或者几十秒之后就会恢复正常。那么我想BUFF可以这么定义:持续一定时间(永久也是一定的时间),并且可以修改自身属性和相应自身的某些时间的状态集合(一个BUFF可能携带多个效果)的,叫做BUFF。
 
BUFF逻辑有以下部分:有一定的时间(永久或者某一段时间)、修改自身属性(加速、减速、回血速度、减少CD时间等等)、参与部分逻辑的运算(重伤、眩晕、减速、不受技能效果等等)
 
好了,下面进入正题,怎么来设计BUFF系统。
先提出几个问题:
 
  1. 同一个BUFF,可以重叠吗?(比如减速跟减速、引燃跟引燃)
  2. 如果两个同样的BUFF并存,那么数据上应该怎么计算?UI上怎么表现?
  3. 不同的技能可以打出同一个BUFF吗?(比如持续伤害跟持续伤害)
  4. BUFF需要怎么跟其他的BUFF交互(比如说:存在引燃的时候加血、存在重伤的时候加血、存在引燃的时候引燃)
  5. 不同的BUFF是怎么重叠的?(比如、减速跟减速、加速跟减速、引燃与引燃)
  6. BUFF之间存在优先级吗?(比如女妖面纱和轮子妈的E同时存在时,先触发哪个效果)
 
然后,我来说一下我对应英雄联盟处理的理解,顺便回答一些这个问题,并且附带部分实例以及我对于这些实物的理解。
  1. 同一个BUFF可以重叠吗?答案是逻辑上肯定是允许的,但是有些在业务上是不被允许的。
    1. 先说一个相对容易理解的,减速效果基本上可以跟其他的任何效果重叠,包括其他的减速效果。比如,英雄A给你一个减速效果(比如说炼金术师的那个黏黏的技能),这个时候英雄B给你一个减速的效果(比如说蛮王的嘲讽)。这个时候你肯定是被双重减速的。如果英雄B的技能比英雄A更加弱,不论是替换也好,还是没有效果也好,都不能达到很好的游戏效果,所以这个地方肯定是并存的,减速效果。
    2. 引燃跟引燃是替换式的(就是后一个会替换前一个的)。这个为什么是替换式的效果,你能想象一下,如果对面五个人一级的时候。抓人会有多容易吗?五个点燃,一人A一下,此人必挂。为了可玩性这种技能只能做成替换性。
    3. 持续伤害上有没有并存式的?也有,比如说中毒效果。就应该是并存式,不可能因为后边中了其他类型的毒就会顶替掉前边的中毒效果
    4. 总结:BUFF系统上再设计的时候是肯定允许同一个BUFF同时存在的,至于业务上就看具体的业务室怎么回事了
  2. 如果两个同样的BUFF并存,那么数据上应该怎么计算?UI上怎么表现?
    1. 两个BUFF并存的时候,在数值的计算上应该是以某种方式进行叠加的,比如说减速效果的叠加。UI上则需要根据对应的业务来进行相应的处理,如果需要重点表现出这个BUFF的来源,或者对应的倒计时的这种情况下,则应该分成两个不同的UI来表现,如果仅仅表示自己是存在这个BUFF的情况下,则应该将两个BUFF合并起来表现
    2. 并且,一个BUFF的一部分效果被取消时,BUFF还应该是存在的,直到这个BUFF的所有效果完全消失时,才算整个BUFF消失掉
  3. 不同的技能可以打出同一个BUFF吗?
    1. 这个需要看具体的业务需求,如果是业务需求是同一个BUFF那么就是同一个BUFF。
    2. 其实这个问题更多的时候问的是一种状态,比如说,中毒跟引燃是不是共同引用了同一个状态?毕竟他们除了UI以外,其他的效果基本上可以说是一模一样,所以在BUFF上他们属于不同的BUFF但是实现的业务逻辑上他们可以使用同一个持续伤害的状态实现。
  4. BUFF需要怎么跟其他的BUFF交互
    1. 应该先定义下一下BUFF的交互都包含哪些:BUFF相互的影响(存在重伤效果时,治疗效果减半;存在免疫魔法效果时,魔法没有效果只有伤害;存在格挡时,下一次受得普攻无效;减速效果的叠加)、BUFF的替换(引燃之间的相互替换、中毒效果的层数叠加)、BUFF的消除(技能消除BUFF、BUFF之间的抵消)
    2. BUFF相互影响:这个可以通过修改自身数据来修改,比如说,治疗时候的治疗系数(治疗的时候可以通过这个系数来控制质量血量)、魔法/物理的格挡次数(魔法或者物理伤害的时候,扣除这个数据)、自己本身速度值的控制
    3. BUFF的替换:这个数据相对较小,可以在BUFF添加的时候,自己处理,比如说,引燃。在添加引燃效果时,可以代码检查一下是不是存在引燃,如果存在,直接删掉原来的。添加新的就OK了。
    4. BUFF的相互抵消:同替换就OK,添加的时候,判断是否可以抵消掉自身的BUFF存在就OK,如果存在,则不添加就OK。
    5. 技能消除BUFF:可以根据BUFF的类别(减速、禁锢、重伤、持续伤害等等)或者BUFF ID(对应BUFF名字的ID比如:引燃、莫甘娜的E等等)来消除BUFF
  5. 不同的BUFF是怎么重叠的?
    1. 可以重叠的通过修改自身属性来实现数据上的重叠
    2. 不可以重叠的,在BUFF内部的某个回调、添加BUFF时的检查、或者配表区别来实现兼容性都是可取的。视具体情况而定
  6. BUFF之间存在优先级吗?
    1. 这个是必然的,不过,我觉得很有必要统一一下这个优先级的定义:是指不同的BUFF之间的先后调用(女妖面纱和轮子妈的E同时存在谁先触发?),或者修改部分具体属性的优先级(加速与减速同时存在的时候,先算减速?还是先算加速?算法不统一的话,可能会造成,因为BUFF添加的先后顺序或者储存BUFF状态的顺序而发生的不确定因素。这个是需要尽力避免的)。
    2. 推荐的优先级:容易获得的状态先被触发。加速减速的话。确定下来就好,不过推荐先加后减。
 
总结:
  1. BUFF系统需要两个列表UI层面列表和状态层面列表
  2. 添加BUFF的时候,需要添加一个UI层面列表和对应的BUFF的状态层面列表,并且将UI层面列表中的数据与BUFF层面列表的状态绑定(当状态被移除的时候需要判定对应的BUFF列表是不是也需要被移除)
  3. 在人物自身中添加对应的相关属性值(女妖面纱、轮子妈的E可以格挡两次魔法伤害,在他们同事存在时,格挡了伤害,需要减少对应人物的格挡值,并且,触发提供格挡效果的BUFF对应回调)
  4. BUFF的回调,主要依靠于注入的方式进行回调
  5. BUFF的替换,可以使用BUFF自身控制或者关系表的方式来进行处理
 
 
卧槽,写完之后,发现,说的还不是很明白,凑合着看吧。 

Buff系统设计的更多相关文章

  1. 论游戏中Buff的实现 [转]

    论游戏中Buff的实现 分类: C/C++ 游戏开发2012-09-13 14:30 574人阅读 评论(6) 收藏 举报 c++游戏开发 源地址:http://blog.codingnow.com/ ...

  2. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  3. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  4. 【开源】OSharp框架解说系列(6.1):日志系统设计

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  5. 分布式系统设计权衡之CAP

    写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是 ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _02系统设计(总体设计、概要设计)

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)

    Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...

  8. NI Labview 将图形化系统设计用于肿瘤治疗

    NI Labview 将图形化系统设计用于肿瘤治疗 - Jeff Stevens, Sanarus 挑战:在严格的规则条例范围内保持设计过程的情况下,为通过FDA认证的等级II医疗设备进行设计.原型并 ...

  9. <转>简单之美——系统设计黄金法则

    作者: 包云岗  发布时间: 2012-05-19 13:06  阅读: 3036 次  推荐: 1   原文链接   [收藏] 最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自 ...

随机推荐

  1. 代码自定义双色title的按钮

    所图所示,通过代码自定义这样的按钮. .h文件 // // CustomButtom.h // testPlus // // Created by 鹰眼 on 14/10/20. // Copyrig ...

  2. App测试

    (1)App独特测试点: 客户端兼容性测试:系统版本.不同深度定制的rom.屏幕分辨率.中断测试.安装.卸载.升级.对其他程序的干扰等 需要的一些工具: appnium / lr /  jmeter ...

  3. SQL Server最近怎样了

    SQL Server最近怎样了 又到年终了,大家都作最后冲刺 最近园子里真的多了很多口水帖,无论大家争论得多么激烈,时间依然滴答滴答地过,争论完之后我们依然要继续埋头苦干 为年终奖.为明年做准备 这里 ...

  4. ASP.NET MVC 从零开始 - Web.config

    这篇文章是从我的 github 博客 http://lxconan.github.io 导入的. 在上一篇中,我们从零开始创建了一个非常简单的 ASP.NET MVC 应用程序.接下来,你是不是期望我 ...

  5. C语言 · 出现次数最多的数

    问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...

  6. JSON Web Token实际应用

    一.JWT认证方式的实现方式 1.客户端不需要持有密钥,由服务端通过密钥生成Token. 2.客户端登录时通过账号和密码到服务端进行认证,认证通过后,服务端通过持有的密钥生成Token,Token中一 ...

  7. Android开发学习之路-提升用户体验小技巧

    记得之前看谷歌的一个视频提到这个用户体验的问题,今天想起来了就写了个Demo来记录下. 当一个事件发生之后,用户需要一段时间才能知道结果,那么这段时间究竟应该让用户干什么?这个问题很常见,比如我们的软 ...

  8. SSIS Design1: 源数据提取

    数据量的大小由两个方面决定:行的宽度和数据行的数量,为了减少ETL运行的时间,可以从源数据的提取上做优化,从数据源的输入上控制数据的质量和大小,减少转换和IO. 一,减少行的宽度 1,只加载需要的数据 ...

  9. 传智播客--数据绑定--INotifyPropertyChanged(小白内容)

    INotifyPropertyChanged一般在数据绑定的时候使用. InotifyPropertyChanged是.net内置的接口,数据绑定时会检测DataContext是否实现了Inotify ...

  10. Android搜索框效果

    转载:http://blog.csdn.net/walker02/article/details/7917392 需求:项目中的有关搜索的地方,加上清空文字的功能,目的是为了增加用户体验,使用户删除文 ...