日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cocos论坛九问九答

發布時間:2023/12/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cocos论坛九问九答 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天周未,Shawn將之前在Cocos論壇中回答的問題,整理了部分繼續我的分享之路!

1. 既然有這么流暢的Cocos界面,為什么應用使用它來做H5界面

問:既然有這么流暢的Cocos界面。為什么應用使用RN來做界面,這是為什么呢?我覺得所有的Web界面都應該用Cocoas 來替換啊。

答:使用游戲引擎APP也是可以的,我想到有幾個問題
1. 游戲引擎制作UI成本較高,HTML+CSS+JS開發UI效率和成本最優的。
2. 游戲引擎的界面渲染機制不同(opengl),它比系統原生的渲染消耗更多電池電量。
3. 游戲界面其實是在普通app應用上的一個opengl窗口,為了跨平臺使用了c++、js等語言,要調用原生設備的能力還需要在不同語言中橋接,既要會游戲引擎,又要會原生開發,人力成本也高

反饋:獲得樓主的贊


2. CocosCreator怎么引入外部庫?

問:怎么引入外部庫,我引用了一個socket的庫,在新手入門提到的socket已經過期了,無法下載,現在我能在瀏覽器里面預覽,但無法打包發布
還有怎么改端口和服務器連接測試

  • 方案1:將三方庫放入assets,在需要使用的地方使用requre引入

  • 方案2:將三方庫放入assets,選中js代碼文件,在屬性編輯器上勾選“導入為插件”,大多三方庫導入的模塊為全局變量,類似你在index.html中導入

  • 方案3:在工程目錄下創建一個build-templates目錄,對應build工程目錄結構,構建時將三方庫復制到構建工程中,創建自己的index.html模板,但是在調試時對三方庫的使是會報錯的。強烈不推介這種方式。

  • 方案4:可以使用npm管理三方庫,代碼中使用requre引入,但官方不推介使用npm,會有冗余代碼在項目中,這個有點不爽。

3. creator中,如何給一個預制體中的按鈕添加一個點擊事件?

問:我制作了一個預制資源,這個預制資源中有一個按鈕。當我在layout節點下面生成這個預制體后,如何給他上面的按鈕添加一個點擊事件,彈出一個提示框?在生成的時候我給他添加了一個標簽,所以可以根據這個 標簽拿到這個按鈕,但是怎么給他添加點擊事件?我用了this.button.node.on(),但是這個好像只能在onLoad中使用,在生產預制資源的方法中使用會報 “on”沒有被定義的錯。各位大神幫幫忙!

答:可以在實例化prefab時,用代碼創建事件監聽

let node = cc.instantiate(prefab); this.layout.addChild(node); node.on(cc.Node.EventType.TOUCH_END, ?(touchEvent) => {cc.log('點擊事件在此'); })

反饋:根據您的方法成功了,謝謝了。

4、如何獲取resources里的某個文件的真實安裝路徑?

問:在安卓和蘋果端需要取creator中resources文件里的文件用,問下,這怎么獲取,有相關的api?

答:試試下面這個


let url = cc.url.raw('resources/xxx'); cc.log(url);


>反饋:成為解決方案

5. cocos2djs 如何使用自帶的require?

問:如題, window系統命令行創建的cocos2d js 工程,無法使用cocos2d-html5自帶的require , 但js-test ,里有用到require。不解,把js-test用到require的相關js文件添加到jslist中 也出現 require undefined …

答:cocos2d-js項目可以使用webpack或browserify進行代碼編譯,文件以模塊的方式編寫,可以使用require、exports導入導出模塊。 我有一個demo,你可以參考一下,github地址:https://github.com/ShawnZhang2015/c2js-puremvc
游戲的源代碼放在js目錄下,使用browserify打包后輸出到src目錄。
此方法支持web和native。

6. protobufjs序列化后如何拼接上消息Id?

問:protobufjs序列化后得到的是arrayBuffer

? ?let pb = pbkiller.loadAll('proto', '');let player = new pb.UserLoginMsgReq(); ?player.openID = 0;player.logintype = 3;player.gameID = 3;let data = player.toArrayBuffer();

如何在data前面加上消息ID 以便服務收到數據后 進行反序列化?

答:你好我是pbkiller的開發者,所有potobuf數據都需要事先定義,你可以參考下面的做法

//在proto中定義一個前后端通用的協議 message PBMessage {uint32 id = 0; //消息IDbytes data = 1; //上層協議(二進制數據) } ... //游戲代碼中用法: let data = player.toArrayBuffer(); //實例化一個PBMessage消息 let message = new pb.PBMessage(); //設置消息ID和數據 message.id = xxx; message.data = data; //將message序列化發給服務器,服務器需要做兩次反序列化 socket.send(message.toArrayBuffer());

此方法需要前后端配合,后端解碼PBMessage,通過PBMessage.id將其路由給具體的處理函數解碼PBMessage.data。

7. 在選中構建的時候選中調試模式怎么去掉左下角的 信息!

問:

答:構建時關閉調試模式

再問:我是說, 在我需要開啟調試模式的情況下.

再答:不好意思!用下面的方法可以

cc.director.setDisplayStats(false);

反饋:謝謝咯

8. cocos creator打開錯誤

問:有沒有好心人能告訴我一下這個問題是什么。難受剛下載下來什么都還沒做,就冒出個問題出來。新手求大佬告知,關于這個問題我真的頭大。

答:spawn是nodejs的執行外部命令的函數(創建子進程),我猜想有可能是環境變量問題,運行外部程序失敗了。
給你兩個方案:

  • 你嘗試下可以正常編譯、預覽游戲嗎?如果可以,只是編輯器啟動時報這個錯,暫時不理會它。

  • 換用1.6的版本試試,是否也有這個問題。

  • 還有就是打開Creator的開發者工具:

  • 反饋:非常感謝您對我的幫助,游戲能正常啟動,1.6的版本也有這個問題,我現在調試一下看看。

    9. creator中,如何給一個預制體中的按鈕添加一個點擊事件?

    問:我制作了一個預制資源,這個預制資源中有一個按鈕。當我在layout節點下面生成這個預制體后,如何給他上面的按鈕添加一個點擊事件,彈出一個提示框?在生成的時候我給他添加了一個標簽,所以可以根據這個 標簽拿到這個按鈕,但是怎么給他添加點擊事件?我用了this.button.node.on(),但是這個好像只能在onLoad中使用,在生產預制資源的方法中使用會報 “on”沒有被定義的錯!

    答:可以在實例化prefab時,用代碼創建事件監聽

    let node = cc.instantiate(prefab); this.layout.addChild(node); node.on(cc.Node.EventType.TOUCH_END, (touchEvent) => {cc.log('點擊事件在此'); });

    反饋:根據您的方法成功了,謝謝了。

    10. creator 觸摸事件關不掉?

    問:


    答:你上面this.btleft.on函數第二個參數是個匿名函數,off時又是一個新的匿名函數,當然關不掉。給你兩個種方法:

  • 你可以用targetOff,但會把所有事件給關了

  • 將事件函數變成成員函數或子函數

  • {//定義一個事件函數_eventFunc() {...}//注冊事件this.node.on('xxx', this._eventFunc, this); ...//關閉事件this.node.off('xxx', this._eventFunc, this); }

    反饋:回答被樓主贊了

    11. 為什么我Label的字體大小不能調整?

    問:字體font size 屬性有個鎖, 是怎么回事?數值也改變不了


    答:Label處于SHRINK模式,Label的字體大小受node的Size約束,改變Size大小后就可以調整FontSize了

    12. NODE節點和sprite組件和sprite節點關系?

    問:NODE節點和sprite組件和new 出來的sprite節點是什么關系,官網說的很迷糊。


    答:給你打個比喻,節點像一個人,組件則像這個人身上的裝備,Sprite就像一件衣服,改變了節點的外觀。一個節點可以裝備多套裝備,裝備你還可以自己打造,就是自己寫的組件代碼。想想常玩的游戲,如魔獸、英雄聯盟這些,英雄與裝備的設計。

    上面的比喻只說單個方向,再給你打個比方: 節點像一臺機甲(小時候看過神龍斗士沒有?),組件就像坐進機甲里的操縱者,操縱者有自己的特性,讓機甲有不同的表現。而且這一臺機甲可以坐很多個人,也就是很多個組件。

    你說的 new出來的sprite,那是cocos2d-x/js中的概念了,在Creator中Sprite不能直接new出來,是先有機甲,再有給機甲中添加一個Sprite

    let node = new cc.Node(); let sprite = node.addComponent(cc.Sprite); sprite.xxx = yyy; // 給sprite賦值 node.x = 100; //給節點賦值 cc.log(sprite.node === node); // sprite內部操縱node

    如果你覺得上面的方式創建一個Sprite很麻煩,你可以將他封裝一下,可以嘗試下面的方法:

    cc.createComponent = function (componentType, parent) {let node = new cc.Node();if (parent instanceOf cc.Node) {node.parent = parent;}let component = node.addComponent(componentType);return component; };//創建一個 let sprite = cc.createComponent(cc.Sprite); let label = cc.createComponent(cc.Label);

    推薦你看下我寫的節點與組件的概念分享
    http://www.jianshu.com/p/fc46301305fa
    http://www.jianshu.com/p/2b92157179d3

    結語

    兩個月前Shawn加班不多,每天都在論壇刷問題,早、中、晚連刷三次,一次十多分鐘,比自己刷牙還積極!能幫助到別人自己也很高興,同時也能收獲很多。

    這周遇到兩位Creator道友,在工作中遇到了困難,他們在簡書和Cocos論壇發現,我的文章中提到與他們問題相關的內容,隨后聯系上我,有幸我提供的方案對他們有所幫助。有趣的是,還收得了他們的紅包酬謝,天啊,我的第一次,就被他們給奪走了(第一次付費服務),我都沒來得及思考怎么會事,就發紅包給收了,在這里對這兩們道友說聲感謝!

    如果大家對我的文章、教程有什么建議和想法歡迎留言!

    總結

    以上是生活随笔為你收集整理的Cocos论坛九问九答的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。