cocos creator 代码中获取组件对象实例
我们先回顾一下cocos creator中脚本的生命周期 -> 脚本的生命周期
- 实例化,
- onload()
- start()
- update(),
- onDestory()
许多使用js写脚本组件的新手 经常会犯一个错误, 就是通过require("xx") 获取其他组件, 然后调用其方法.
毫无疑问这样是错误的, 因为你无法调用类中的非static方法, 以及属性. 如果使用ts就不会遇到这种问题, 因为在你调用之前, 语法提示就会先报错..
我们写的一个个脚本其实就是类, 类被挂载到node上, 之后引擎将其实例化, 我们通过node.getComponent("xx"); 获得的是一个实例化的对象, 这样我们才能通过对象.方法 正确调用
那么我们如何使用单例模式, 动态获得脚本的实例化对象呢?
有时候我们需要脚本即继承了cc.Component组件, 又想动态的获取实例化对象,(不通过node.getComponent())的方法
其实有一个方法, 实现在脚本中获取其实例化对象,
@ccclass
export default class UIMaskManager extends cc.Component {
static instance: UIMaskManager = null;
static GetInstance() {
if(this.instance == null) {
this.instance = new cc.Node("UIMaskManager").addComponent(this);
}
return this.instance;
}
}
方法很简单, 动态的创建一个cc.Node结点, 将脚本挂在该结点上
在其他脚本中 我们就可以通过UIMaskManager.GetInstance()获取UIMaskManager实例