zoukankan      html  css  js  c++  java
  • ECS杂想

    昨晚敲代码时突然想到,为什么ECS架构能降低复杂度
     
    比如之前老出问题的死亡流程:
    、战斗系统的Loop里,扣血空了
    调Death接口
    、调统计计算
    、外部注册的战斗结束回调
    很可能Death的逻辑流牵扯很远,同“外部战斗回调”互斥了
    代码层级很难察觉到这类冲突
     
    为什么会有这种互斥呢?怎么发生的?
    常见的一种:Death中清理了某些数据,战斗结束回调的逻辑流里仍持有该数据的引用
    想想看,这一系列的动作(死亡、统计、各种回调)实际上发生在一条逻辑流中,互相间极易穿插
    PS:顺序式编程的思路下,逻辑流从搜集数据那就开始了,因为后续调用不会重新搜集那份数据(ECS最大的优点了吧),而这份数据的“中途更新”……没有很好的方式捕获到
     
    同一条逻辑流之中,我要主动去找寻“本次修改影响到的点”,依赖程序员对整体业务的熟悉度、细心度
    一旦没有找全受影响点……~囧
     
    ECS将这条逻辑流拆分了
    比如战斗扣血空了,就只是血量空了,不在本处调用Death逻辑,交给“Death System”处理
    这样战斗就是一条独立完整的逻辑流了,等它完毕后,再跑“Death System”的逻辑
    新的逻辑流起始于“遍历检查空血对象”
    ……
    每条逻辑流起始,均会重新搜集所需数据,接下来只跑本逻辑相关的一小部分,“修改影响点”不仅少了,且集中了

     

  • 相关阅读:
    [题解?]luogu_P1415拆分数列(dp(不懂
    [题解]luogu_P1070道路游戏(堆dp
    [题解]luogu_P2577午餐(贪心dp
    [题解]luogu_P2157学校食堂(状压dp
    [模板]线段树合并
    [题解]宝藏(状压
    [题解]NOI2010超级钢琴
    [题解]luogu_P2161_会场预约(线段树颜色相关
    【总结】LCA的4种求法
    SRM517-600加强版(DP)
  • 原文地址:https://www.cnblogs.com/3workman/p/7160350.html
Copyright © 2011-2022 走看看