判断CocosCreator节点是否有某一类脚本组件

在我们的游戏需求里,可能会需要做一类操作,判断某个节点是否有某一类javascript脚本,然后进行执行相应的功能函数。

一、用javascript自带的一种判断方法

这种方法在任何javascript代码里都可以使用:

instanceof运算符

如果是普通的javascript代码,则示例如下:

function Cat(name){
  Animal.call(this);
  this.name = name || 'Tom';
}
(function(){
  // 创建一个没有实例方法的类
  var Super = function(){};
  Super.prototype = Animal.prototype;
  //将实例作为子类的原型
  Cat.prototype = new Super();
})();
 
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); //true

如果是CocosCreator的代码,则:

var ComponentBase = require("ComponentBase");
cc.Class({
    extends: ComponentBase,

    properties: {
         
    },

    start () {
        console.log("111111", this instanceof ComponentBase);
    },
});

二、这个是CocosCreator独有的,就是用getComponent("父类脚本名")

首先看我们的示例代码:

ComponentBase.js:

cc.Class({
    extends: cc.Component,

    properties: {

    },

    onCallback: function (params) {
        console.log("vvv");
    },
});

ComponentDerived1.js:

var ComponentBase = require("ComponentBase");
cc.Class({
    extends: ComponentBase,

    properties: {
         
    },

    start () {
        console.log("111111", this instanceof ComponentBase);
        console.log(this.getComponent("ComponentBase"));
    },

    onCallback: function (params) {
        console.log("vvv1", "test1");
    },
});

ComponentDrived2.js:

var ComponentBase = require("ComponentBase");
cc.Class({
    extends: ComponentBase,

    properties: {
         
    },

    start () {
        console.log("2222", this instanceof ComponentBase);
        console.log(this.getComponent("ComponentBase"));
    },

    onCallback: function (params) {
        console.log("vvv2", "test2");
    },
});

最后一个,判断是否继承了自定义类ComponentBase的ComponentManager.js:

cc.Class({
    extends: cc.Component,

    properties: {
        
    },

    start () {
    	var test = this.getComponents("ComponentBase")
        console.log(test);
        for(var key in test) {
        	test[key].onCallback();
        }
    },
});

再如下图绑定脚本:

运行,会在console上看到:

经过这一翻折腾之后,可以看出,我们的getComponents不只可以获取有相应文件名的脚本,还可以通过获取父类的文件名,获取到自己的脚本。

这样的话,就可以通过获取父类的主文件名来获取脚本,从而达到判断脚本是否具有某一类功能的目的。

最后,有一个小tips:

想一想,如果我们是getComponents("cc.Component"),这样就能直接获取该节点下的所有脚本啦。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值