工作记录2023/8/18

2023/8/18

对象池和对象引用

战斗系统中的逻辑层的敌人逻辑单元由于需要经常生成,欲将之加入对象池来减少消耗。加入对象池的操作没有问题,对象本身的数据也能够正常释放。但是战斗系统最初的设计,使得逻辑层之间以及逻辑层和表现层之间直接大量使用逻辑单元的引用进行数据操作,这不仅使得类之间过于耦合,还导致使用的对象池由于没有释放掉对象,其他部分对该对象的引用还是能够正常的访问,这就导致的很多的数据访问问题。

解决方案是将对象之间的直接引用改为索引,用的是逻辑单元本身的唯一uid,在逻辑单元管理器中维护了逻辑单元的对象数组,所有其他类需要访问逻辑单元需要从逻辑单元管理器中通过uid进行查找,这样就避免了逻辑单元被对象池回收后还能被访问的问题,但是由于每次访问需要进行一次查找,增加了计算量。

在将逻辑层和表现层的直接引用拆分的时候,发现有一些表现层的操作只需要逻辑层状态改变时进行一次操作就行,但是却在tick中每帧进行检测,随即将其改为事件驱动,大大减少了计算量。

动画状态机在这次修改中原本也是使用逻辑单元的直接引用,然后每帧访问逻辑单元的状态在状态机中进行tick并作为状态转换的依据。趁着这次修改将逻辑单元的状态在本地储存了一份,并通过事件在逻辑单元改变时进行一次同步。完美完成了将动画系统和逻辑单元的解耦并将其从每帧访问改为了事件驱动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值