1. 程式人生 > >CocosCreator運用(一)

CocosCreator運用(一)

獲得元件方法:只需要在元件方法裡訪問this.node變數:
start: function () {
var node = this.node;
node.x = 100;
}

獲得其他元件:需要用到getComponent這個API:
start: function () {
var label = this.getComponent(cc.Label);
var text = this.name + ’ started’;
label.string = text;
}

如果在節點上找不到你要的元件,getComponent 將返回 null,如果你嘗試訪問 null 的值,將會在執行時丟擲 “TypeError” 這個錯誤。因此如果你不確定元件是否存在,請記得判斷一下:

start: function () {
var label = this.getComponent(cc.Label);
if (label) {
label.string = “Hello”;
}
else {
cc.error(“Something wrong?”);
}
}

僅僅能訪問節點自己的元件通常是不夠的,指令碼通常還需要進行多個節點之間的互動。最直接的方式就是在 屬性檢查器 中設定你需要的物件。以節點為例,這隻需要在指令碼中宣告一個 type 為 cc.Node 的屬性:
cc.Class({
extends: cc.Component,
properties: {
// 宣告 player 屬性
player: {
default: null,
type: cc.Node
}
}
});
這裡聲明瞭一個player屬性,預設值為null,並且指定物件為cc.node。接著你就可以將層級管理器上的任意一個節點拖到這個 Player 控制元件,這樣一來它的 player 屬性就會被設定成功,你可以直接在腳本里訪問 player:
var Player = require(“Player”);

cc.Class({
extends: cc.Component,
properties: {
// 宣告 player 屬性
player: {
default: null,
type: cc.Node
}
},

start: function () {
    var playerComp = this.player.getComponent(Player);
    this.checkPlayer(playerComp);
},

// ...

});

有時候,遊戲場景中會有很多個相同型別的物件,像是炮塔、敵人和特效,它們通常都有一個全域性的指令碼來統一管理。如果用 屬性檢查器 來一個一個將它們關聯到這個指令碼上,那工作就會很繁瑣。為了更好地統一管理這些物件,我們可以把它們放到一個統一的父物體下,然後通過父物體來獲得所有的子物體:
cc.Class({
extends: cc.Component,

start: function () {
    this.cannons = [];
    this.cannons = this.node.getChildren();
}

});
全域性名字查詢:當 cc.find 只傳入第一個引數時,將從場景根節點開始逐級查詢:
this.backNode = cc.find(“Canvas/Menu/Back”);

通過全域性變數訪問,試著定義一個全域性物件 window.Global,這個物件裡面包含了 backNode 和 backLabel 兩個屬性:
window.Global = {
backNode: null,
backLabel: null,
};
由於所有指令碼都強制宣告為 “use strict”,因此定義全域性變數時的 window. 不可省略。
接著你可以在合適的地方直接訪問並初始化 Global:
cc.Class({
extends: cc.Component,

onLoad: function () {
    Global.backNode = this.node;
    Global.backLabel = this.getComponent(cc.Label);
}

});
初始化後,你就能在任何地方訪問到 Global 裡的值:
cc.Class({
extends: cc.Component,

// start 會在 onLoad 之後執行,所以這時 Global 已經初始化過了
start: function () {
    var text = 'Back';
    Global.backLabel.string = text;
}

});