1. 程式人生 > >cocos 文件學習筆記(一)

cocos 文件學習筆記(一)

tips

  • this.node.destory()和this.node.removeFromParent第一次接觸到cocos creator的this.node.destory()是在做官方給出的事例,但是發現呼叫這個destory會報錯,於是搜尋了一下,也沒有結果,但是發現了一個與他相似的東西叫做this.node.removeFromParent() 試了一下 這個倒沒有出現問題。先記錄一下 ,想搞明白這個destory()到底是設麼毛病。

    感覺自己解決了,拼寫問題,這個坑感覺還蠻大的,文件給出的是troy但個人常用寫法為tory
  • Math.abs()顧名思義abs即absolute返回絕對值的意思
  • this.node可以獲得當前元件獲得同一個節點上的其他元件要用getComponent

    start: function () {
        var label = this.getComponent(cc.Label);
        var text = this.name + ' started';
    
        // Change the text in Label Component
        label.string = text;
    }
    也可以傳入一個類名。對使用者定義的元件來說類名就是指令碼名
     var rotate = this.getComponent("SinRotate");
  • 利用屬性檢查器設定元件

在上面的例子中,如果你將屬性的 type 宣告為 Player 元件,當你拖動節點 "Player Node" 到 屬性檢查器,player 屬性就會被設定為這個節點裡面的 Player 元件。這樣你就不需要再自己呼叫 getComponent 啦。

    // Cannon.js
    var Player = require("Player");

    cc.Class({
        extends: cc.Component,
        properties: {
            // 宣告 player 屬性,這次直接是元件型別
            player: {
                default: null,
                type: Player
            }
        },
        start: function () {
            var playerComp = this.player;
            this.checkPlayer(playerComp);
        },
        //...
    });
還可以將屬性的預設值由 null 改為陣列[],這樣你就能在 屬性檢查器 中同時設定多個物件。

不過如果需要在執行時動態獲取其它物件,還需要用到下面介紹的查詢方法。

生命週期

onLoad元件指令碼的初始化

一般在場景載入時觸發該回調

start

第一次執行 update 之前觸發。start 通常用於初始化一些中間狀態的資料,這些資料可能在 update 時會發生改變,並且被頻繁的 enable 和 disable。

update很關鍵,遊戲開發的關鍵點

每一幀渲染物體的行為,狀態,方位等。這些更新操作通常都放在update中

lateUpdate

update會在所有動畫更新前執行
但如果要在動畫效果如粒子效果更新之後才進行額外操作,就要放在lateUpdate中回撥

onDestroy

當元件或者所在節點呼叫了destroy()則會呼叫onDestroy回撥

onEnable

當元件的 enabled 屬性從 false 變為 true 時,或者所在節點的 active 屬性從 false 變為 true 時,會啟用 onEnable 回撥。倘若節點第一次被建立且 enabled 為 true,則會在 onLoad 之後,start 之前被呼叫。

onDisable

當元件的 enabled 屬性從 true 變為 false 時,或者所在節點的 active 屬性從 true 變為 false 時,會啟用 onDisable 回撥

節點操作

  • 節點的建立、克隆、建立預製節點和銷燬
  1. 建立

    cc.Class({
        extends: cc.Component,
    
        properties: {
            sprite: {
            default: null,
            type: cc.SpriteFrame,
            },
        },
        start: function () {
            <!-- 通過new cc.Node例項化一個節點 -->
            var node = new cc.Node('Sprite');
            <!-- 將節點新增為元件 -->
            var sp = node.addComponent(cc.Sprite);
            <!-- 將組建新增到場景中 -->
            sp.spriteFrame = this.sprite;
            node.parent = this.node;
        },
    });
  2. 克隆通過cc.instantiate來完成

        cc.Class({
            extends: cc.Component,
    
            properties: {
                target: {
                default: null,
                type: cc.Node,
                },
            },
    
            start: function () {
                var scene = cc.director.getScene();
                var node = cc.instantiate(this.target);
    
                node.parent = scene;
                node.setPosition(0, 0);
            },
        });
  3. 建立預製節點與克隆,不過type那裡是cc.Prefab,我目前的理解是相當於克隆了一份預製節點
  4. 銷燬節點採用this.node.destroy()即可