星际2技能系统分析
Posted colourstar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了星际2技能系统分析相关的知识,希望对你有一定的参考价值。
转自 http://blog.csdn.net/alistair_chow/article/details/53319888
最近一直在想设计一个易扩展的,可配置的技能系统框架。看了几个项目源码,可能自己功力不够,感觉类与类之间的套用很混乱,看的云里雾里的,然后网上到处找资料。
对两个技能设计比较感兴趣,一个是Dota2
http://moddota.com/forums/discussion/14/datadriven-ability-breakdown-documentation
一个是星际2
https://www.sc2mapster.com/wiki/galaxy/data/
目前先重点关注下星际2的技能系统,由于没有资料介绍,只能通过星际2的地图编辑器去揣测。
数据结构
星际2的数据为树状结构
数据对象
星际2的整个数据对象都是通过XML进行配置的
星际2按照上图对数据对象进行了分类
GAME
游戏相关数据对象
Campaign
战役相关数据对象
Actor
演算器数据对象
Art And Sound
美术和声音数据对象
Terrain
地形数据对象
Hero
英雄
UI
界面
Advanced
高级
技能系统 ABE
貌似都把星际2的技能系统称为ABE(Ability, Behavior, Effect)。
Ability(技能)
技能的基础数据,比如名字,ID,消耗等。
Effect(效果)
技能所产生的效果,比如造成伤害,星际2的Effect与动画,特效,音效等是没有关系的,它是负责逻辑运算,所有的动画,特效都是在Actor里面进行处理。
效果又可以生成效果或行为,所以效果也是个树状结构。
如:灵能风暴的效果会持续几秒钟的时间,并且会在某一地区搜索单位时周期性的产生另外一个效果。这个搜索效果会产生在每个单位身上并造成伤害。
Behavior(行为)
效果所产生的行为,比如BUFF
人族机枪兵,有移动,停止,攻击及兴奋剂四个技能,对应类图如下
CAbil
技能的虚基类,所有技能类都派生于它
属性
Name: 技能名称
SetId:唯一标识
Alignment:技能瞄准对象
TechPlayer:科技玩家
TechAliasArray:科技别名
SharedFlags:共享标签
XML定义
CAbilMove
移动技能基类
CmdButtonArray:技能按钮的值,关联CButton对象
FleeRange:当遭遇敌人攻击但又无法还击时,单位将逃跑的距离
FleeTime:单位逃离单次攻击时将会花费的最大时间
FllowAcquireRange:跟随搜索范围
FllowRangeSlop:跟随距离
MinPatrolDistance:最小巡逻距离
XML定义
实体类
移动实体类,根节点为继承的基类名, ID为实体类名
CAbilStop
停止技能基类
属性
XML定义
实体类
CAbilAttack
攻击技能基类
属性
MinAttackSpeedMultiplier:使用该技能后攻击速度提高的最小倍数。
MaxAttackSpeedMultiplier:使用该技能后攻击速度提高的最大倍数。
CmdButtonArray:技能的特定命令相关的数据
AcquireFilters:定义拥有该技能的单位可以自己获取的目标类型
AcquirePriority:当一个以上的同单位技能尝试自动获取目标时,返回最高的“获取有限级”的技能会最先有机会潜在目标。不会获取目标的技能应将之设为0。该值被设为0的技能不会获取目标。
SmartFilters:这些类型对象能被攻击
XML定义
实体类
执行逻辑
用CAbilMove举例
上图中重名文件是因为包含在不同的XML文件中,可以理解为存在与不同的类库里
每个对象除了基本的属性外,还可以挂载其他的模组,如按钮,单位,验证器等,基类挂载了按钮
实体类挂载了单位,验证器,移动器,移动器包含了飞行和地面两个
可以推算出其逻辑为
1.用户点击Move按钮
2.Move按钮找到当前单位的CMoveAbil
3.Move实体类找到对应的CMover
4.CMover根据Move实体类及单位的属性执行单位移动
类似于MVC模式
View(CButton)
Model(CAbil)
Controller(CMover)
以上是关于星际2技能系统分析的主要内容,如果未能解决你的问题,请参考以下文章