UI渲染合批实践-根据社区文章-下篇(支持原生)
上篇
-
根据上一篇的实践,已经实现了H5下的列表渲染合批,并且无需修改任何引擎代码。
-
优点是无需定制引擎,支持嵌套mask,并且同时支持H5和原生。
H5与原生的关系
-
翻看引擎代码发现,代码分为了两部分,为Ts层和c++层。通过jsb绑定,ts/js能够直接调用c++实现的类库。具体可参考以下论坛文档:使用JSB手动绑定
-
如果ts代码,并没有真正调用到c++层对应的方法,那么原生那边自然就不会生效了。因此,如果你需要定制引擎的话,那么修改了ts类之后,可能还需要修改对应的c++类。
上篇的技术要点
-
监听director的before_draw和after_draw事件,这两个事件在原生也依然生效。
-
在before_draw的时候,临时改变children的结构,在after_draw的时候,再还原回去。
上篇为啥只支持H5,不支持原生?
-
在上篇,笔者在改变children结构的时候,是这样写的:
this.node["_chidren"] = -
这样的调用,只会在H5平台生效,在c++是不生效的。
如何支持原生
- 那么有没有方法能够依然在不定制引擎情况下,同时支持H5和原生呢?答案是有的,请看:商店链接-列表动态分层合批(49.9)
优点
- 无需定制引擎,不修改任何引擎代码。
- 支持嵌套mask。
- 同时支持H5和原生。
ps,笔者正在寻找base广州的机会,如果合适的话,可以私信我,谢谢
