关于初始化非 active 节点的讨论

我要吐槽:内存管理篇 继续讨论:

组件上不会增加你说的方法,因为 active 为 false 时,我们希望的是没有任何开销。否则如果调用了 onLoad,那么 onDestroy 也要被调用,哪怕这个节点从来没激活过。

最好是拆分逻辑和渲染节点,让逻辑保持激活,渲染保持禁用。例如你可以让父节点 active,子节点 inactive 来达到目的。
也可以在父节点的 onLoad 里面,deactivate 自身。
——以上都能实现非 active 节点的初始化。

1赞

引用原帖回复

当然,如果实在吐槽很多,要不再加个 visible 属性?

其实假如我把逻辑和渲染分开!
我要在逻辑中去拿渲染中某个节点,如果我不挂组件,那么我怎么拿到这个节点,通过cc.find()方法?
每次拿每次都要查找!
如果我挂个View组件,将其所有想在逻辑中获得的节点都引用到View组件上,那是不是可以直接拿到我想要的节点,
这样的话也就相当于每个需要的节点都要挂组件脚本了!
然后在抽象个BaseView组件,在这里直接加个控制ative = true的事件是不是会更好?

虽然在逻辑中也是可以去控制这个View的,但是如果一些超级简单的面板是不是也要加个control去控制(例如:一个警告的面板,就是一张图,任何操作都没有,点击一下就关闭),这种超级简单的逻辑,在一个View实现是不是就OK了!

@toddlxt

你说的解决方法没错啊,不需要 cc.find,我看不出来这样有什么问题吗?

简单的话这样处理是可以的,不过如果项目比较大,还是不建议这么做。因为 active = false 本身还是会有一些的引擎框架层的开销。

这种面板,可以不拆脚本,但也不需要初始化什么逻辑吧?

现在的初始化,已经可以写在 onLoad / onEnable / start 中了,
你想要的其实是加个 onReady 或者 create 这样的回调,那用户就有了四种选择…… 感觉学习成本会有点大

如果真有这个需求,是不是应该加个 visible = false 属性,然后就保持 active = true, visible = false 更好?

但是要控只是否显示啊!

谢谢参与讨论,我再自己的思考一下!按道理所有东西都因该是逻辑来支撑是否显示,我这样写应该是不标准的!
是为了偷懒!应该统一标准

呃…… 大概明白你的意思