Buff系统设计
- 什么是BUFF?
- 同一个BUFF,可以重叠吗?(比如减速跟减速、引燃跟引燃)
- 如果两个同样的BUFF并存,那么数据上应该怎么计算?UI上怎么表现?
- 不同的技能可以打出同一个BUFF吗?(比如持续伤害跟持续伤害)
- BUFF需要怎么跟其他的BUFF交互(比如说:存在引燃的时候加血、存在重伤的时候加血、存在引燃的时候引燃)
- 不同的BUFF是怎么重叠的?(比如、减速跟减速、加速跟减速、引燃与引燃)
- BUFF之间存在优先级吗?(比如女妖面纱和轮子妈的E同时存在时,先触发哪个效果)
- 同一个BUFF可以重叠吗?答案是逻辑上肯定是允许的,但是有些在业务上是不被允许的。
- 先说一个相对容易理解的,减速效果基本上可以跟其他的任何效果重叠,包括其他的减速效果。比如,英雄A给你一个减速效果(比如说炼金术师的那个黏黏的技能),这个时候英雄B给你一个减速的效果(比如说蛮王的嘲讽)。这个时候你肯定是被双重减速的。如果英雄B的技能比英雄A更加弱,不论是替换也好,还是没有效果也好,都不能达到很好的游戏效果,所以这个地方肯定是并存的,减速效果。
- 引燃跟引燃是替换式的(就是后一个会替换前一个的)。这个为什么是替换式的效果,你能想象一下,如果对面五个人一级的时候。抓人会有多容易吗?五个点燃,一人A一下,此人必挂。为了可玩性这种技能只能做成替换性。
- 持续伤害上有没有并存式的?也有,比如说中毒效果。就应该是并存式,不可能因为后边中了其他类型的毒就会顶替掉前边的中毒效果
- 总结:BUFF系统上再设计的时候是肯定允许同一个BUFF同时存在的,至于业务上就看具体的业务室怎么回事了
- 如果两个同样的BUFF并存,那么数据上应该怎么计算?UI上怎么表现?
- 两个BUFF并存的时候,在数值的计算上应该是以某种方式进行叠加的,比如说减速效果的叠加。UI上则需要根据对应的业务来进行相应的处理,如果需要重点表现出这个BUFF的来源,或者对应的倒计时的这种情况下,则应该分成两个不同的UI来表现,如果仅仅表示自己是存在这个BUFF的情况下,则应该将两个BUFF合并起来表现
- 并且,一个BUFF的一部分效果被取消时,BUFF还应该是存在的,直到这个BUFF的所有效果完全消失时,才算整个BUFF消失掉
- 不同的技能可以打出同一个BUFF吗?
- 这个需要看具体的业务需求,如果是业务需求是同一个BUFF那么就是同一个BUFF。
- 其实这个问题更多的时候问的是一种状态,比如说,中毒跟引燃是不是共同引用了同一个状态?毕竟他们除了UI以外,其他的效果基本上可以说是一模一样,所以在BUFF上他们属于不同的BUFF但是实现的业务逻辑上他们可以使用同一个持续伤害的状态实现。
- BUFF需要怎么跟其他的BUFF交互
- 应该先定义下一下BUFF的交互都包含哪些:BUFF相互的影响(存在重伤效果时,治疗效果减半;存在免疫魔法效果时,魔法没有效果只有伤害;存在格挡时,下一次受得普攻无效;减速效果的叠加)、BUFF的替换(引燃之间的相互替换、中毒效果的层数叠加)、BUFF的消除(技能消除BUFF、BUFF之间的抵消)
- BUFF相互影响:这个可以通过修改自身数据来修改,比如说,治疗时候的治疗系数(治疗的时候可以通过这个系数来控制质量血量)、魔法/物理的格挡次数(魔法或者物理伤害的时候,扣除这个数据)、自己本身速度值的控制
- BUFF的替换:这个数据相对较小,可以在BUFF添加的时候,自己处理,比如说,引燃。在添加引燃效果时,可以代码检查一下是不是存在引燃,如果存在,直接删掉原来的。添加新的就OK了。
- BUFF的相互抵消:同替换就OK,添加的时候,判断是否可以抵消掉自身的BUFF存在就OK,如果存在,则不添加就OK。
- 技能消除BUFF:可以根据BUFF的类别(减速、禁锢、重伤、持续伤害等等)或者BUFF ID(对应BUFF名字的ID比如:引燃、莫甘娜的E等等)来消除BUFF
- 不同的BUFF是怎么重叠的?
- 可以重叠的通过修改自身属性来实现数据上的重叠
- 不可以重叠的,在BUFF内部的某个回调、添加BUFF时的检查、或者配表区别来实现兼容性都是可取的。视具体情况而定
- BUFF之间存在优先级吗?
- 这个是必然的,不过,我觉得很有必要统一一下这个优先级的定义:是指不同的BUFF之间的先后调用(女妖面纱和轮子妈的E同时存在谁先触发?),或者修改部分具体属性的优先级(加速与减速同时存在的时候,先算减速?还是先算加速?算法不统一的话,可能会造成,因为BUFF添加的先后顺序或者储存BUFF状态的顺序而发生的不确定因素。这个是需要尽力避免的)。
- 推荐的优先级:容易获得的状态先被触发。加速减速的话。确定下来就好,不过推荐先加后减。
- BUFF系统需要两个列表UI层面列表和状态层面列表
- 添加BUFF的时候,需要添加一个UI层面列表和对应的BUFF的状态层面列表,并且将UI层面列表中的数据与BUFF层面列表的状态绑定(当状态被移除的时候需要判定对应的BUFF列表是不是也需要被移除)
- 在人物自身中添加对应的相关属性值(女妖面纱、轮子妈的E可以格挡两次魔法伤害,在他们同事存在时,格挡了伤害,需要减少对应人物的格挡值,并且,触发提供格挡效果的BUFF对应回调)
- BUFF的回调,主要依靠于注入的方式进行回调
- BUFF的替换,可以使用BUFF自身控制或者关系表的方式来进行处理
Buff系统设计的更多相关文章
- 论游戏中Buff的实现 [转]
论游戏中Buff的实现 分类: C/C++ 游戏开发2012-09-13 14:30 574人阅读 评论(6) 收藏 举报 c++游戏开发 源地址:http://blog.codingnow.com/ ...
- [Django]用户权限学习系列之设计自有权限管理系统设计思路
若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...
- Web应用多账号系统设计及微信扫码登录实现
Web应用多账号系统设计及微信扫码登录实现 1 前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...
- 【开源】OSharp框架解说系列(6.1):日志系统设计
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 分布式系统设计权衡之CAP
写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是 ...
- 基于C/S架构的3D对战网络游戏C++框架_02系统设计(总体设计、概要设计)
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)
Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...
- NI Labview 将图形化系统设计用于肿瘤治疗
NI Labview 将图形化系统设计用于肿瘤治疗 - Jeff Stevens, Sanarus 挑战:在严格的规则条例范围内保持设计过程的情况下,为通过FDA认证的等级II医疗设备进行设计.原型并 ...
- <转>简单之美——系统设计黄金法则
作者: 包云岗 发布时间: 2012-05-19 13:06 阅读: 3036 次 推荐: 1 原文链接 [收藏] 最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自 ...
随机推荐
- EF 连接sql2000
正常连接会提示版本低 可以先用ef连接高版本的sql然后新建好EDMX文件后,在右键xml方式打开,把ProviderManifestToken="2008" 改为2000 然后再 ...
- 体验phonegap3.0
网上有各种各样的phonegap环境搭建资料,鉴于学习和整理的考虑,我还是把我搭建的过程整理出来 这篇文章中将涉及到的内容 PhoneGap环境需要的组件 Node环境 JDK Android SDK ...
- 使用 Productivity Power Tools 2013来帮助你提高 VS2013的工作效率
Visual Studio Gallery中发布了Productivity Power Tools 2013 的更新.在此版本中,此版本解决了客户报告的大量错误和问题,并介绍了一项称为语法行压缩的新功 ...
- Python黑帽编程2.2 数值类型
Python黑帽编程2.2 数值类型 数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型.长整型.布尔.双精度浮点.十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的区 ...
- Chrome 控制台新玩法-console显示图片以及为文字加样式
有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.lo ...
- ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
- OO设计原则
开闭原则(OCP) 里氏代换原则(LSP) 依赖倒转原则(DIP) 接口隔离原则(ISP) 合成/聚合利用原则(CARP) 迪米特法则(LOD)
- Zabbix实现微信报警
一. 申请企业微信账号,申请地址 https://qy.weixin.qq.com/ 二. 登陆企业微信账 图一 图二 2.添加微信账号 图一 图二 完成以上步骤后 就完成了微信账号的添加 三.新建 ...
- Leetcode-463 Island Perimeter
#463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...
- Building third-party products of OpenCascade
Building third-party products of OpenCascade eryar@163.com Available distributives of third-party pr ...