昨天同事遇到了一个比较奇葩的需求:一个列表,每行里有若干个item。这列表有个列标头,就像Excel那样,选中了列标头后,会有一个竖条的半透明高亮图出现。
然后问题来了,这个高亮图如果盖在最上面,会盖住item。垫在最下面,会被每一行的底框挡住。
也就是说,按设计图,这个高亮竖条其实是需要放在item和item行的底框之间的。
这本质是渲染次序和节点树结构的冲突问题,和很多人热烈讨论,很多大佬写了不少东西出来做的那个背包合批渲染其实是类似的。
我想到,问题的关键其实是,我们用来做移动、布局等控制的节点树结构,和用于渲染的树结构,一般在游戏引擎里是只有一个树。
所以,如果将这两个树结构分开会不会好一点?
就像ccc里node的anchor。在别的一些引擎或者编辑工具里,会分出anchor和pivot。
现在很多人讨论时提到想要一个设置渲染次序,提到的一些方案无非是设计一个值表示先后次序,这种方式等于将渲染节点排到了一个数组中,操作起来其实不是很方便。
如果渲染次序也是一个树结构,只是和我们编辑时的树结构分开单独存在,那么这个树的使用就方便多了。
当然了,分开一个渲染树的最大问题,是怎么去初始化。一般来说,为了方便,渲染树按我的想法,是会随着逻辑树的结构自动生成,这没什么问题,不做额外操作的话,其实和目前的情况一样。
然后有些背包之类的结构里,可以通过修改这个渲染树去优化渲染次序。
但是问题是改变了渲染树之后,这棵渲染树不和原本的结构对应了,这时候再有新的对象创建,该怎么去自动分配到渲染树中?