cocos 文件學習筆記(一)
阿新 • • 發佈:2018-12-10
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 回撥
節點操作
- 節點的建立、克隆、建立預製節點和銷燬
-
建立
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; }, });
-
克隆通過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); }, });
- 建立預製節點與克隆,不過type那裡是cc.Prefab,我目前的理解是相當於克隆了一份預製節點
- 銷燬節點採用this.node.destroy()即可