cocos creator日常積累--持續(xù)更新

歡迎入群學(xué)習(xí)交流:535098339
各路大神弄的資料

 // 1.動(dòng)態(tài)加載資源
 //第一個(gè)參數(shù)是resource下的文件名,不加后綴.function里第二個(gè)參數(shù)是資源類型

 // 加載 Prefab
 cc.loader.loadRes("test assets/prefab", function (err, prefab) {
     let newNode = cc.instantiate(prefab);
     cc.director.getScene().addChild(newNode);
 });

 // 加載 AnimationClip
 cc.loader.loadRes("test assets/anim", function (err, clip) {
     myNode.getComponent(cc.Animation).addClip(clip, "anim");
     anim.play('anim'); //播放動(dòng)畫
 });

 // 加載 SpriteAtlas(圖集),并且獲取其中的一個(gè) SpriteFrame
 // 注意 atlas 資源文件(plist)通常會(huì)和一個(gè)同名的圖片文件(png)放在一個(gè)目錄下, 所以需要在第二個(gè)參數(shù)指定資源類型
 cc.loader.loadRes("test assets/sheep", cc.SpriteAtlas, function (err, atlas) {
     let frame = atlas.getSpriteFrame('sheep_down_0');
     sprite.spriteFrame = frame;
 });
 // 加載 SpriteFrame
 cc.loader.loadRes("test assets/image", cc.SpriteFrame, function (err, spriteFrame) {
     myNode.getComponent(cc.Sprite).spriteFrame = spriteFrame;
 });
 // 加載 SpriteFrame第二種方式
 //這個(gè)方法與上一個(gè)方法不同的是直接改圖片的紋理,但凡是場(chǎng)景用到的test.png,一定會(huì)變成一樣的.如果要批量改一個(gè)預(yù)制體的圖片的話建議用上一個(gè)
 sprite.spriteFrame.setTexture(cc.url.raw('res/test.png'));
 //9.加載json
 let url = cc.url.raw('resources/HeroDefault.json')
 cc.loader.load(url, function (err, res) {
     cc.log('load[' + url + '], err[' + err + '] result: ' + JSON.stringify(res));
 });
 // http://blog.csdn.net/alpha_xiao/article/details/52102252 這個(gè)比官網(wǎng)的詳細(xì),有示意圖,新手可以看
 // http://sunmoon-x.com/cocoscreator%E8%B5%84%E6%BA%90%E5%8A%A0%E8%BD%BD1-3-1%E7%89%88%E6%9C%AC/ 這個(gè)可以更深入的了解加載資源.
//加載播放聲音
cc.audioEngine.play(cc.url.raw("resources/sounds/test.mp3" + url), false,1);
//加載網(wǎng)絡(luò)圖片
      setSpriteFrame_sprite_url: function (sprite, url) { //設(shè)置網(wǎng)絡(luò)圖片
        //加載https圖片失敗用下面方法.
       // let url_http=url.replace('https','http')
        cc.loader.load({
            url: url,
            type: 'png'
        }, function (err, texture) {
            if (err) {
                console.log('加載圖片失敗' + err)
                return;
            }
            sprite.spriteFrame = new cc.SpriteFrame(texture);
            //sprite.spriteFrame.setTexture(texture) 希望你放棄setTexture這種方法,賊坑!
        });
    },

 // 2.順序執(zhí)行動(dòng)作.
 let moveTime = 0.2;
 let x = 0;
 let y = -32;
 let action = cc.moveBy(moveTime, x, y); //向下移動(dòng)32像素
 let finished = cc.callFunc(function (target, score) {
     cc.log('回調(diào)發(fā)生')
 }, this, 100)
 let myAction = cc.sequence(action, finished);
 // 3. 官方示例碰撞檢測(cè) 點(diǎn)擊剛體觸發(fā)事件
 cc.Class({
     extends: cc.Component,
     properties: {
         collider: {
             default: null,
             type: cc.PolygonCollider
         },
         title: {
             default: null,
             type: cc.Label
         }
     },
     // use this for initialization
     onLoad: function () {
         cc.director.getCollisionManager().enabled = true;
         cc.director.getCollisionManager().enabledDebugDraw = true;
         this.title.string = 'normal';
         cc.eventManager.addListener({
             event: cc.EventListener.TOUCH_ONE_BY_ONE,
             onTouchBegan: (touch, event) => {
                 let touchLoc = touch.getLocation();
                 if(cc.Intersection.pointInPolygon(touchLoc,this.collider.world.points)){
                     this.title.string = 'Hit';
                 } else {
                     this.title.string = 'Not hit';
                 }
                 return true;
             },
         }, this.node);
     },
 });
 // 4.自定義類 把類作為一個(gè)對(duì)象的屬性,比如二維數(shù)組的實(shí)現(xiàn)
 let Item = cc.Class({
     name: 'Item',
     properties: {
         id: 0,
         itemName: '',
         itemPrice: 0,
         iconSF: cc.SpriteFrame
     }
 });
 cc.Class({
     extends: cc.Component,
     properties: {
         items: {
             default: [],
             type: Item
         }
     },
 });
 //5.得到一個(gè)節(jié)點(diǎn)
 this._player = this.node.getChildByName('player');
 this._player = cc.find('Canvas/player')
 //6.設(shè)置顏色
 this.node.color = cc.Color.RED; //默認(rèn)是WHITE.
 //7.導(dǎo)入外部腳本
 let cfg = 1;
 module.exports = cfg; //這兩句是cfg.js 在other.js里獲取cfg的值用: let cfg=require('cfg');
 //module.exports 是一個(gè)空對(duì)象,也可以像下面那樣來(lái)獲得cfg
 module.exports = {
     getCfg: function () {
         return cfg;
     },
 }
 //8.用本地?cái)?shù)據(jù)庫(kù)保存設(shè)置,游戲存檔之類的.
 if (JSON.parse(cc.sys.localStorage.getItem('config')) !== undefined) {
     let config = JSON.parse(cc.sys.localStorage.getItem('config'));
 }
 cc.sys.localStorage.setItem('config', JSON.stringify(config));
 //9.音頻默認(rèn)是使用 webAudio 的方式加載并播放的向胡,只有在不支持的瀏覽器才會(huì)使用 dom 元素加載播放恼蓬。
 cc.loader.load(cc.url.raw('resources/background.mp3'), callback);
 //10.長(zhǎng)按實(shí)現(xiàn)人物持續(xù)移動(dòng)
    const self=this;
    this.node.on(cc.Node.EventType.TOUCH_START, function (event) {
        this.cb = function () {
            cc.log("長(zhǎng)按")
        };
        self.scheduleOnce(this.cb, 0.15);
    }, this.node);
    this.node.on(cc.Node.EventType.TOUCH_END, function (event) {
        self.unschedule(this.cb);
    }, this.node);
 //11 本地存儲(chǔ)圖片,用原生
 loadNative = function (url, callback) {
     let dirpath = jsb.fileUtils.getWritablePath() + 'img/';
     let filepath = dirpath + MD5(url) + '.png';

     function loadEnd() {
         cc.loader.load(filepath, function (err, tex) {
             if (err) {
                 cc.error(err);
             } else {
                 let spriteFrame = new cc.SpriteFrame(tex);
                 if (spriteFrame) {
                     spriteFrame.retain();
                     callback(spriteFrame);
                 }
             }
         });

     }

     if (jsb.fileUtils.isFileExist(filepath)) {
         cc.log('Remote is find' + filepath);
         loadEnd();
         return;
     }

     let saveFile = function (data) {
         if (typeof data !== 'undefined') {
             if (!jsb.fileUtils.isDirectoryExist(dirpath)) {
                 jsb.fileUtils.createDirectory(dirpath);
             }

             if (jsb.fileUtils.writeDataToFile(new Uint8Array(data), filepath)) {
                 cc.log('Remote write file succeed.');
                 loadEnd();
             } else {
                 cc.log('Remote write file failed.');
             }
         } else {
             cc.log('Remote download file failed.');
         }
     };

     let xhr = new XMLHttpRequest();

     xhr.onreadystatechange = function () {
         cc.log("xhr.readyState  " + xhr.readyState);
         cc.log("xhr.status  " + xhr.status);
         if (xhr.readyState === 4) {
             if (xhr.status === 200) {
                 xhr.responseType = 'arraybuffer';
                 saveFile(xhr.response);
             } else {
                 saveFile(null);
             }
         }
     }.bind(this);
     xhr.open("GET", url, true);
     xhr.send();
 };
 
 // 設(shè)置適配模式
        cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT);
        cc.view.setDesignResolutionSize(750, 1334, 0);
//然后場(chǎng)景里的節(jié)點(diǎn)加上widget適配.
//后臺(tái)監(jiān)聽函數(shù)
 cc.game.on(cc.game.EVENT_HIDE, function(event){
            cc.log("切換后臺(tái)",event);
        });
        cc.game.on(cc.game.EVENT_SHOW, function(event){
            cc.log("切換前臺(tái)",event);
        }); 
//得到j(luò)ava的變量
var id = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/JsbService", "getUidToken", "()Ljava/lang/String;");
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/JsbService", "getBatteryPercent", "()I");
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/JsbService", "wxShareUrl", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V", url, title, desc, type);
//取消node的所有監(jiān)聽
this.node.targetOff(this.node);
//取消計(jì)時(shí)器的所有監(jiān)聽
this.unscheduleAllCallbacks();

    //--->>> 動(dòng)作,類似c2dx api 基本無(wú)變化
        var mTo = cc.moveBy(1,-100, -200);
        var mAction = cc.repeatForever(cc.sequence(cc.moveBy(1,-100, -200),mTo.reverse(),cc.delayTime(0.5),cc.callFunc(function(action,data){
            console.log("action callback:"+data.himi);
        },this,{tx:100,himi:"i'm action callback and bring data"})));
        mySprite.node.runAction(mAction);
        //暫停動(dòng)作
        mySprite.node.stopAction(mAction);
//

順便提一下cocos creator里是通過(guò)設(shè)置 節(jié)點(diǎn)的 active 屬性僵芹,來(lái)控制可見性的处硬,
setPosition等方法只能修改本節(jié)點(diǎn),不能修改附屬的子節(jié)點(diǎn)拇派,但是可以通過(guò)給父節(jié)點(diǎn)加動(dòng)作runAction(cc.MoveTo(...))郁油,來(lái)變相達(dá)到想要的效果
動(dòng)作系統(tǒng):https://blog.csdn.net/likendsl/article/details/53413050

//按鈕全局添加音效事件
cc.Component.EventHandler._emitEvents = cc.Component.EventHandler.emitEvents;
cc.Component.EventHandler.emitEvents = function (clickEvents, event) {

    if (event instanceof cc.Event.EventTouch) {
        if (event.type == "touchend") {
            cc.ss.sound.playEffect("buttonclick.mp3")
        }
    }
    cc.Component.EventHandler._emitEvents.apply(this, arguments);
};
//設(shè)置場(chǎng)景全局加速
cc.director.getScheduler().setTimeScale(1.5);
cc.director.getPhysicsManager().enabledAccumulator = true;
cc.director.getPhysicsManager().FIXED_TIME_STEP = 1 / 20

某大神關(guān)于性能優(yōu)化的一些見解https://forum.cocos.com/t/topic/75032/2

不清楚你用的版本是否可以使用渲染組件了。
可以的話攀痊,魚如果可以用instance來(lái)渲染,理論上可以大幅度地減少drawcall拄显。
骨骼動(dòng)畫的定制我也不太清除引擎組的進(jìn)度苟径。但是以我最近在寫的骨骼動(dòng)畫來(lái)說(shuō),減少動(dòng)畫K幀的數(shù)目躬审,應(yīng)該可以減少找插值的關(guān)鍵幀的時(shí)間棘街,但這個(gè)不一定是瓶頸。
有一個(gè)很值得注意的地方承边,不開啟碰撞檢測(cè)的時(shí)候遭殉,還有30ms,但是加上碰撞檢測(cè)博助,達(dá)到了幾百ms险污,有理由懷疑瓶頸在 碰撞檢測(cè) 上,或者說(shuō)富岳,由于碰撞后邏輯導(dǎo)致的 骨骼動(dòng)畫顯示蛔糯,消失,導(dǎo)致提交的cmdbuffer需要不斷重新創(chuàng)建窖式,骨骼動(dòng)畫不斷調(diào)用構(gòu)造函數(shù)蚁飒,析構(gòu)函數(shù)的開銷
至于解決方案:
前者好說(shuō),用上 場(chǎng)景管理樹 :hlbvh, quat-tree, 應(yīng)該都有現(xiàn)成的萝喘,感興趣可以去看看bullet物理引擎的官方文檔,里面碰撞檢測(cè)管線的描述很詳細(xì)实抡,這可以減少碰撞檢測(cè)的開銷熏版,但是不好說(shuō)減少多少,畢竟場(chǎng)景也沒(méi)多少物體哼丈。
后者呢,老生常談凸椿,用 對(duì)象池 吧削祈。如果開銷瓶頸不是動(dòng)畫,而是創(chuàng)建和析構(gòu)上脑漫,那么回收骨骼動(dòng)畫的時(shí)候髓抑,最好不要將骨骼動(dòng)畫的節(jié)點(diǎn)從節(jié)點(diǎn)樹上拿下來(lái),而是 將骨骼動(dòng)畫移動(dòng)到屏幕外(移動(dòng)到場(chǎng)景外优幸,會(huì)破壞場(chǎng)景管理樹的結(jié)構(gòu)吨拍,需要重新創(chuàng)建,所以記得profile一下性能瓶頸网杆,究竟是碰撞是瓶頸羹饰,還是渲染是瓶頸,得出結(jié)論后碳却,再?zèng)Q定是否要移動(dòng)骨骼動(dòng)畫到場(chǎng)景外队秩,這是一環(huán)套一環(huán)的) ,然后可以進(jìn)行一下嘗試:
1.將節(jié)點(diǎn)的active設(shè)置為false
2.將節(jié)點(diǎn)的動(dòng)畫停掉昼浦,
3.將節(jié)點(diǎn)的透明度設(shè)置為0
并且這幾個(gè)方案都嘗試一下吧馍资。哪一個(gè)真正能提高性能,我最近也在寫游戲引擎关噪,個(gè)人愚見鸟蟹,這個(gè)和引擎開發(fā)者,做出的 設(shè)計(jì)取舍 有關(guān)使兔。最好去問(wèn)問(wèn)做這一塊的引擎開發(fā)者
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末建钥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虐沥,更是在濱河造成了極大的恐慌熊经,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置蜀,死亡現(xiàn)場(chǎng)離奇詭異奈搜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盯荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門馋吗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人秋秤,你說(shuō)我怎么就攤上這事宏粤〗徘蹋” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵绍哎,是天一觀的道長(zhǎng)来农。 經(jīng)常有香客問(wèn)我,道長(zhǎng)崇堰,這世上最難降的妖魔是什么沃于? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮海诲,結(jié)果婚禮上繁莹,老公的妹妹穿的比我還像新娘。我一直安慰自己特幔,他們只是感情好咨演,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚯斯,像睡著了一般薄风。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拍嵌,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天遭赂,我揣著相機(jī)與錄音,去河邊找鬼横辆。 笑死嵌牺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的龄糊。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼募疮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炫惩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起阿浓,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤他嚷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后芭毙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筋蓖,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年退敦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粘咖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侈百,死狀恐怖瓮下,靈堂內(nèi)的尸體忽然破棺而出翰铡,到底是詐尸還是另有隱情,我是刑警寧澤讽坏,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布锭魔,位于F島的核電站,受9級(jí)特大地震影響路呜,放射性物質(zhì)發(fā)生泄漏迷捧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一胀葱、第九天 我趴在偏房一處隱蔽的房頂上張望漠秋。 院中可真熱鬧,春花似錦巡社、人聲如沸膛堤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肥荔。三九已至,卻和暖如春朝群,著一層夾襖步出監(jiān)牢的瞬間燕耿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工姜胖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留誉帅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓右莱,卻偏偏與公主長(zhǎng)得像蚜锨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慢蜓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容