【临时笔记】属性设计感悟

| 发布     | 分类 游戏感悟  | 标签 感悟 
属性设计一般都是用数组来存储,主要目的是为了策划后期可能的扩展。如果用字段来表示,万一要加一个属性就坑了,很多地方都得改。
属性用数组存储,那么很自然属性肯定用数组的索引来表示属性ID。

在游戏中通一个相同名称的属性需要多个字段来表达不同含义,比如: ”攻击“他需要包含单位“基础攻击", 穿装备或技能附加的"+攻击"、”+攻击百分比“,最后得计算”最终攻击“。
因此一个相同名称的属性需要多个ID来表示,如果让他们挨着放一起。比如: 1.基础攻击、2.附加攻击、3.附加攻击百分比,4.最终攻击。5.基础移动速度、6.附加速度、7.附加移动速度百分比、8.最终移动速度。
假设上面的百分比是相对 ”最终攻击 =(基础攻击+附加攻击)* 附加攻击百分比“
这时我们需要加一个类型属性 “附加模块攻击” 他不参与 百分比的计算。 ”最终攻击 =(基础攻击+附加攻击)* 附加攻击百分比 + 附加模块攻击“。
那么这个属性ID放置位置就尴尬了,因为策划可能已经配置了很多表不好按以前的方式挨着去设置属性ID,不然策划表得都修改,所以只能把属性ID往后面放。
这样有洁癖的同学是不是很不舒服,不够美观。而且混乱。

所以我觉得这样比较好 我们先定义所有属性的最终ID 1--100的范围,当然用不了这么多。所有其他类型的ID参照 "最终属性ID + 100 * N"
可以得到:
final     :  1   — 99
int       :  101 — 199
add       :  201 — 299
pre       :  301 — 399
moduleAdd :  401 - 499

代码方面, 索引都是以 最终属性ID为准, 所以他们的index都是 0—99。读配置的时候根据百位来决定属性防哪个float[]。这样属性表里只要配置最终属性的描述就可以。属性计算方面和一个float[] 差不多。哪整个PropData计算就行
class PropData
{
  float[] finals;
  float[] inits;
  float[] adds;
  float[] pres;
  float[] moduleAdds;
}
上一篇: 【转】贝塞尔曲线的数学原理
下一篇: 【临时笔记】单位设计感悟