[muzzik分享]: NodeS扩展,优雅的获取节点和组件方式

还在为getComponent和getChildByName烦恼吗?担心每次频繁的遍历消耗太浪费时间?那就来扩展一下我们的cc.Node吧,让你不必为了一长串getChildByName和getComponent而烦恼。使用得当也可以免去每次的遍历消耗(大量节点下).


使用说明

  • 获取子节点
  • node.child(“xxx”)
  • node.child(“xxx/xxx”)
  • node.child(“xxx”, true) // true表示获取最新的节点并更新节点缓存
  • 获取组件
  • node.label 或者 node.sprite 或者 node.button 或者 node.layout … (统一为小写,大写转为下划线加小写)
  • 设置自动更新子节点缓存
    • node.child_update_b = true; //会监听当前节点所有子节点的移除事件并删除相应缓存
  • 清除组件缓存
    • node.label = null; 赋值即清除, 下次获取时会自动更新缓存

###备注说明

  1. 由于内部给所有获取的节点和组件都存储了缓存,所以下次获取是直接拿到缓存中的数据, 如果要更新缓存请看上面说明。
    好处
  2. 分摊性能消耗,只在使用的第一次遍历获取,之后都是获取的缓存(可以手动/自动更新缓存)
  3. 简化接口,不必写一长串的getComponent/getChildByName, 怎么方便怎么来

-> 接下来看看扩展方式

  1. 将NodeS扩展.txt中的内容复制到creator.d.ts的Node类中(位置随意, 注意不要覆盖其他接口)
  2. 将nodes.ts脚本拖入项目中并置顶(提示:脚本和文件夹排列顺序默认是按照字母排列)
  3. 现在就可以随意使用啦;

github: https://github.com/1226085293/nodes

12赞

优雅,永不过时

mark…

牛批普拉斯

先mark下。

大佬能优雅的获取其它节点的组件不

牛逼牛逼。

请问nodes.ts拖入项目中并置顶是指assets中要排在第一个的意思吗?

提示ReferenceError: globalThis is not defined

在脚本文件夹中排在最上面就行了,这是为了防止在未定义前使用其接口,你把globalThis换成window试试

可以了,感谢!

mark~~~

插眼!maker

mark
~666~

优雅,永不过时~

好东西 :100:

东西不错啊,nb++