cocos creator 學習總結
一、基本內容:
1.cc.Label相關:
(1)動態建立cc.Label : var node = new cc.Node('text'); node.addComonpnet(cc.Label);
(2) 設定文字內容:node.getComponent(cc.Label).string = 'test'; 設定大小:node.getComponent(cc.Label).fontSize = 30 文字對齊:參考creator中
(3) 如何動態獲取文字的寬度: node.getComponent(cc.Label).string = 'test'; var getWidth = node.width;這樣即可獲得寬度;注意事項:要讓node所在父節點active =true,即讓js指令碼呼叫onload函式之後,才能正確獲取with;
(4) 文字長度超出creator中設定長度時不顯示:node.getComponent(cc.Label).overFlow = cc.Label.Overflow.CLAMP 還有其它幾種模式暫時沒用到後續研究,這裡說下含義,NONE(無樣式)、CLAMP(截斷)、SHRINK(自動縮小文字以適應大小)、RESIZE_HEIGHT(自增長高度)
2.cc.Sprite相關
(1)動態建立cc.Label : var node = new cc.Node('text'); node.addComonpnet(ccSprite);
(2)設定圖片:node.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(texture);
a) 精靈幀獲取的獲取方法1:new cc.SpriteFrame(texture); 優點:動態載入,缺點:會有非同步問題
那麼texture如何獲取?cc.loader.load({url: cc.mg.util.get_wxhead(userData.url), type: 'jpg'}, function (err, texture) {
var head = new cc.SpriteFrame(texture);
dialog.getChildByName('face').getChildByName('mask').getChildByName('tx').getComponent(cc.Sprite).spriteFrame = head;
});
b) 精靈幀獲取的獲取方法2:介面繫結的指令碼,即.js檔案properties: 中定義 frame : cc.SpriteFrame,然後在creator中將圖片拉倒這個frame上。優點:初始化載入,方便使用。缺點:會有記憶體大,載入速度慢
3.cc.Animation相關
(1)動畫播放和停止:node.getComponent(cc.Animation).play;node.getComponent(cc.Animation).stop();
(2)註冊動畫播放完成事件:node.getComponent(cc.Animation).on('finished', function(){cc.log('finish')};
(3)備註:creator中預設有個playOnLoad屬性需要注意:含義是在第一次active設為可見的時候會自動播放動畫,如果不需要可以不勾選。
4.ToggleGroup相關
定義:組合框(多項中只能選擇一項)
(1)怎麼獲取toggle(其中的一項):this.togglegroup.toggleItems[0];這程式碼訪問第一項。
(2)怎麼獲取toogle是否選中:this.togglegroup.toggleItems[0].check();呼叫check()方法
(3)備註:在onload獲取呼叫this.togglegroup.toggleItems.length獲取的長度為0,所以只能在start()函式中呼叫,creator設定的
5.cc.Button相關
(1)設定按鈕灰態:node.getComponent(cc.Button).interactable = true;與creator中的EnableAuto中配合;表現上是會灰色了,但是按鈕還是可以點選,還得通過事件回撥來處理,按下return;
(2)事件註冊:btn.on('touchend' || 'mouseup', function(e) {var btn = e.currentTarget; };在回撥內部獲取按鈕自己
(3)修改按鈕的圖片:即修改cc.Sprite元件,參考上面cc.Sprite相關
6. Layout相關
(1)這個佈局控制元件在孩子設定為隱藏的時候,會自動調整孩子的位置,可以設定為左對齊,居中對齊等等;但是現在有個bug:在孩子的型別不同時,自動調整孩子的位置時不對,需要用程式碼控制孩子的位置,如果孩子多的話,最好還是不要用Layout佈局。
7.RichText相關
(1)用法node.getComponent(cc.RichText).string = '<color=#FF0000>' + '我是富文字' + '</c>';
(2)換行增加字串‘<br/>’;
8.定時器相關
(1)建立:
a) this.schedule(this.updatePlayerTime,1); 引數1:callback 引數2:間隔;備註:這個this一定要掛接在元件上的指令碼
b) cc.director.getScheduler().scheduleCallbackForTarget(this,function(){},1,0);
(2)銷燬:
a) this.unschedule(this.updatePlayerTime); 銷燬所有:this.unscheduleAllCallbacks();
b) cc.director.getScheduler().unscheduleCallbackForTarget(this, this.timer);銷燬所有:cc.director.getScheduler().unscheduleAllForTarget(this);
(3)只執行一次:this.scheduleOnce()
9.操作事件相關(點選彈起移動事件)
(1)彈起事件:node.on('touchend' || 'mouseup', function(e) {})
(2)按下事件、長按事件:node.on('touchstart',function(e){})
(3)移動事件:node.on('touchmove',function(e){})
(4)取消事件:node.on('touchcancel',function(e){}) 離開精靈的時候會觸發這個事件
10.cc.EditBox相關
暫時未用到
二、進階內容:
1.全域性系統事件:
a)傳送:var data= {};cc.systemEvent.emit('eventName', data);沒有data:cc.systemEvent.emit('eventName');
b)註冊事件:cc.systemEvent.on('eventName', this.eventCallBack, this);
c)取消事件註冊:cc.systemEvent.off('eventName', this.eventCallBack, this);
d)事件回撥函式:eventCallBack:function(e) { var data= e.detail;};
2.節點動態建立銷燬:
a)var node = new cc.Node("name");
b) node.destroy();
3.根據現有的節點建立節點:
var newNode = cc.instantiate(oldNode);
4.例項化預製:
cc.loader.loadRes('prefab/resName', cc.Prefab, function(err, prefab){
var newNode = cc.instantiate(prefab);
});
5.資源的載入:
cc.loader.load();
cc.loader.loadRes();
cc.loader.loadResArray();
cc.loader.loadResDir();
cc.loader.loadResDir載入資源有沒有同名覆蓋的問題;比如A目錄下a.png;B目錄下也有a.png程式碼中會顯示哪個png,如果用自動圖集肯定沒這問題
6.資源的釋放:
cc.loader.releaseRes(resPath);目前用在介面動態建立,在關閉介面的時候用這個函式釋放當前介面資源prefab;
看下cc.loader類中的釋放函式,目前專案中並沒有用到複雜的記憶體釋放。
7.點A移動到點B,B有父節點,座標如何轉換?
var pos4 = this.pointB.convertToWorldSpaceAR(cc.p(0,0));
var pos5 = this.pointA.parent.convertToNodeSpaceAR(pos4);
var moveTo = cc.moveTo(0.5, pos5);
8.場景切換:
cc.director.loadScene(scene_name, callback); //scene_name為creator中.fire的檔名