属性数据
所有生物都会拥有一个属性数据,它是一个 AttributeData 对象,玩家属性数据略有区别,它负责管理生物的属性,修改或获取生物的属性,都是通过它处理的
在属性数据中,会存储:
- 计数器
counterRegistry,它是CounterRegistry对象 - 元数据
metadata,它是ConcurrentHashMap<String, Any>对象 - 时间戳
lastAttackTimelastDefenseTimelastDamageTime - 私有原子快照
snapshotRef,负责管理属性源,保证属性的统一性,你无需关心它 - 缓存值
cachedBasiccachedPercentscachedAttributescachedPower,负责读取属性和战斗力,你无需关心它
若你要通过 AttributeData 获取生物的属性源、属性值、战斗力,请参阅 javadoc
如果你现在看不懂本篇,那么你现在无需关心它
优化之道
AttributeData 的设计是经过深思熟虑后决定的,要知道,这个世界上并不存在绝对完美的设计,CraneAttribute也一样
以战斗为核心的游戏中,玩家通常对延迟、一致性非常敏感,CraneAttribute 希望在战斗中提供良好的体验,最终决定牺牲一些内存,来换取读多写少情况下的极致性能
CraneAttribute 更适合属性繁多、机制复杂、高频触发且对性能要求较高的玩法设计
传送门 优化之道
