1. 程式人生 > >cocos creator 學習總結

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的檔名