Skip to content

属性数据

所有生物都会拥有一个属性数据,它是一个 AttributeData 对象,玩家属性数据略有区别,它负责管理生物的属性,修改或获取生物的属性,都是通过它处理的

在属性数据中,会存储:

  • 计数器 counterRegistry,它是 CounterRegistry 对象
  • 元数据 metadata,它是 ConcurrentHashMap<String, Any> 对象
  • 时间戳 lastAttackTime lastDefenseTime lastDamageTime
  • 私有原子快照 snapshotRef,负责管理属性源,保证属性的统一性,你无需关心它
  • 缓存值 cachedBasic cachedPercents cachedAttributes cachedPower,负责读取属性和战斗力,你无需关心它

若你要通过 AttributeData 获取生物的属性源、属性值、战斗力,请参阅 javadoc

如果你现在看不懂本篇,那么你现在无需关心它

优化之道

AttributeData 的设计是经过深思熟虑后决定的,要知道,这个世界上并不存在绝对完美的设计,CraneAttribute也一样

以战斗为核心的游戏中,玩家通常对延迟、一致性非常敏感,CraneAttribute 希望在战斗中提供良好的体验,最终决定牺牲一些内存,来换取读多写少情况下的极致性能

CraneAttribute 更适合属性繁多、机制复杂、高频触发且对性能要求较高的玩法设计

传送门 优化之道