level 8
旋转的刀
楼主
遵循了ECS的基本规则,E就是纯ID,啥也没有,C就是纯基础数据,啥也没有,S就是纯业务逻辑处理,啥数据也没有。除了E/C/S 之外,还有 EM/CM/SM 三个脚本负责 实体管理、组件管理、系统管理,基本上都是实现一些实例创建、销毁、查询和实例间关系映射的功能(映射还是为了方便查询)
于是就有了一个很尴尬的情况,就是 entity 类作为一个中间桥梁,其实并没有太大的意义,entity 类实例一端关联着真实数据,也就是 component ,另一端关联着界面元素,也就是 Node,当需要通过修改真实数据去触发渲染系统更新界面时,总会需要多次查询,例如:
step1.改变了记录实体当前所在位置的 component 的值;
step2.发送属性值改变的信号;
step3.负责渲染的 system 收到信号后,先要去查一遍是哪些组件改变了值(当然也可以直接用事件参数传递过来),但总需要遍历这些组件,从组件找到实体,再从实体找到界面元素,再去改变界面元素的位置,这一步过于繁琐,至少需要遍历两遍,即使使用稀疏集或者链式调用都改变不了至少需要查询两遍的情况。
我就感觉很丑陋,非常丑陋,请问大家有更好的办法吗?
2025年02月18日 08点02分
1
于是就有了一个很尴尬的情况,就是 entity 类作为一个中间桥梁,其实并没有太大的意义,entity 类实例一端关联着真实数据,也就是 component ,另一端关联着界面元素,也就是 Node,当需要通过修改真实数据去触发渲染系统更新界面时,总会需要多次查询,例如:
step1.改变了记录实体当前所在位置的 component 的值;
step2.发送属性值改变的信号;
step3.负责渲染的 system 收到信号后,先要去查一遍是哪些组件改变了值(当然也可以直接用事件参数传递过来),但总需要遍历这些组件,从组件找到实体,再从实体找到界面元素,再去改变界面元素的位置,这一步过于繁琐,至少需要遍历两遍,即使使用稀疏集或者链式调用都改变不了至少需要查询两遍的情况。
我就感觉很丑陋,非常丑陋,请问大家有更好的办法吗?