微信小游戏开发之js脚本访问节点和组件方式选择

主题

js脚本中如何获取节点的实例化对象,获得组件通过编辑器挂载方式,还是cc.find()方式呢,那个性能好?

特别说明

CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的补充和分析。

正文

这是一段来自CocosCreator官方文档的说明,容易被忽略,我划个重点。

Cocos Creator 的工作流程是以组件式开发为核心的,简单的说,就是以组合而非继承的方式进行实体的构建。
在 Cocos Creator 中,节点(Node) 是承载组件的实体,我们通过将具有各种功能的“组件(Component)”挂载到节点上,来让节点具有各式各样的表现和功能。

这段话简单明了的指出了CocosCreator场景布局的中心思想:由一个或多个具有UI组件能力、渲染能力、脚本等组建特性的Node节点堆叠组成的界面。

脚本组件,是负责场景中根据业务需要来处理节点组件的动态加载、刷新和后台网络请求等事务的组件,要在脚本中更新和动态加载组件,就得先获得节点和组件的实例化对象,那如何高性能的获得节点和组件呢?

在Cocos社区有一篇大神性能分析的文章:解读 Cocos Creator 引擎:让实例化快 50% 的原理,“拖节点”性能会更好吗?

这篇文章分析了“实例化”原理,给出了一些性能优化的建议。下面是结合这篇文章和其他资料,个人对获得组件的方式的一点看法。

获得节点或组件的两种方式:
  1. 在“属性检查器”设置节点或组件,拖动层级管理器上的节点,到脚本组件上对应的属性即可
cc.Class({
    extends: cc.Component,
    properties: {
        // 声明 player 属性
        player: {
            default: null,
            type: cc.Node
        }
    },
});

拖动层级管理器的节点到Player属性

  1. 在脚本中通过api(this.node.getChildByName()/cc.find())查找
cc.Class({
    extends: cc.Component,

    start: function () {
        //查找当前节点的子节点
        //var nodeList = this.node.children;
        var bgNode  = this.node.getChildByName("Bg");
        //根据传入的路径进行逐级查找
        //cc.find("Bg/StartBtn/Text", this.node);
        //只传入第一个参数时,将从场景根节点开始逐级查找
        //this.backNode = cc.find("Canvas/Bg/Back");
    }
});

注意: getComponent()方法是获取组件实例的方法,在this.node.getComponent是获取节点的组件,和this.getComponent是等效的。

结论

场景中静态的节点,尽量都使用在“属性检查器”中设置节点或组件的方式,动态加载的节点才去采用getChildByName/cc.find。

简单说下我get到的几个点:

  • 刚开始我挺纠结用那种方式获得引用实例的,当我对开发完成的场景中节点重命名后,我发现拖到属性检查器上的节点名也自动更新,而getChildByName/find的路径需要手动去改;
  • getChildByName是需要遍历去查找的,cc.find同样逐级去查找,简单的看它们的性能消耗肯定更大

有哪里理解错误的,请大家即时点醒,谢谢!

结尾

自己动手写,分解项目中的各个模块需求,通过查文档和搜索Cocos社区,解决碰到的问题,最终在微信上线了下面这款微信小游戏《成语锦衣卫》,欢迎大家扫码体验,并作为参考项目模版,开发出属于自己的小游戏

预告

下一节和朋友们说一说:不继承cc.Component的cc.Class,以类的概念来理解,作为模块化的基础

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值