属性设计一般都是用数组来存储,主要目的是为了策划后期可能的扩展。如果用字段来表示,万一要加一个属性就坑了,很多地方都得改。 属性用数组存储,那么很自然属性肯定用数组的索引来表示属性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; }