判断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"),这样就能直接获取该节点下的所有脚本啦。。

猜你喜欢

转载自blog.csdn.net/u013654125/article/details/81635632