天天看點

判斷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();
        }
    },
});
           

再如下圖綁定腳本:

判斷CocosCreator節點是否有某一類腳本元件

運作,會在console上看到:

判斷CocosCreator節點是否有某一類腳本元件

經過這一翻折騰之後,可以看出,我們的getComponents不隻可以擷取有相應檔案名的腳本,還可以通過擷取父類的檔案名,擷取到自己的腳本。

這樣的話,就可以通過擷取父類的主檔案名來擷取腳本,進而達到判斷腳本是否具有某一類功能的目的。

最後,有一個小tips:

想一想,如果我們是getComponents("cc.Component"),這樣就能直接擷取該節點下的所有腳本啦。。

繼續閱讀