Cocos creator -引擎結構
在長期的開發中,發現cc對大型的手游加載專案的速度很慢,于是我產生了一種想法,想把
cocos creator移植在Linux上做開發,編譯時在Windows,但是這樣太麻煩了,索性,研究一下它的構造,看看能否優化一下.
于是發現了很精彩的結構和內造,接下來解釋一下,有能力的開發者,可以自由修改版本,但不能使用修改的版本進行商業化,這是官方的原話,
首先看看我對我的cc都做了什么吧?

1.修改了icon,證明這是我個人使用,不對外開放的
2.增加了 一個局域網穿透功能
()=>將系結的:7456埠 映射給 公網ip+域名 = 對外訪問的游戲
(全程掛起除錯的游戲即可)
3.增加了 一個骨骼影片
()=>將彈出一個 UI面板,可以將目前的骨骼影片,拖拉拽改動,并保存
會生成一個如:
{
320,740;
310,730;
300,720;
}
這樣格式的json,不用手寫,即可快速遍歷讀寫生成骨骼影片拉!
[快夸我是不是很聰明??]
4.增加了一個 圖片轉素材的功能
會將你匯入的PNG二值化,然后移除背景色,幫你扣出圖來
if(你沒有摳圖)=>幫你摳圖->幫你壓縮->完成
else(你摳圖了)=>幫你壓縮->完成


1.打開你的CC根目錄,找到 Resources 資源目錄 =>.editors編輯錄=》creator -你在使用的版本,[我這里以 2.3.3為例]

- Locales = 加密的資源\源-工程\時間戳\瀏覽器擴展 等
- resources = 引擎資源\內核\css\庫
- swift shader = C++的Lib,工程UI\字體\圖示\MAIFO
如果你嘗試去打開 swift shader 的lib,或許你可以修改一些界面樣式
然后為其注入call 來實作某種功能
但他主要的,是為cc創建界面而準備的動態庫
2.Cocos Creator -自己建構式
進入 utils->api ,打開這個檔案

如果你對TS很熟悉,那么這里你就能構造并定義你自己的方法,
但很遺憾,我沒有學TS,, [跳到下一章吧!]

2.1 Cocos Creator -貢獻者
你可以在 Sharp-package.json 里 添加你的 Git,或者增加你的名字,在本地專案里,可以看見自己,
(自我籍慰)沒什么用
2.2 Cocos Creator - templates 模板教程工程
你可以在templates里,找到幾個示范工程,最簡單的hello world就是其中之一
2.3 Cocos Creator-static 內構目錄
static-img 下:你可以修改cc的圖示,在編譯時,看到自己的畫面
目前不知道,是否會修改編譯除錯的那個logo 圖示
static-icon 下:編譯除錯時一并打包進去的icon
其余的可以自行看看,大部分是一些描述和資源檔案,以及壓縮插件和匯入資源的加載方式
和過濾方式
3.cocos creator-inspector 引擎內核構造
3.1accessibility -訪問的成員屬性與定義
3.2animation - 對animation的高度封裝 (cc的寫法很好,無需優化) √可學習
3.3audits - 你的coco 作業流-聯網-驗證-云存
3.4bindings - 系結你的賬號 和3.3關聯
3.5changes - 啟動時檢查你的版本與目標版本是否一致
3.6cm - web的影像顯示方式轉換為 cc獨有的 坐標系
3.7color_picker - 將cc-ui的事件color操作轉換,和拾色器工具,顏色變化node
3.8console 除錯臺
3.9cookie_table - 你的瀏覽器除錯器下的cookie記錄,使你能看到
3.10coverage - cc的更新推送
3.11 cpu_profiler_test_runner - CC.CPU除錯核心呼叫模塊
3.12 devices - 驅動模塊呼叫啟動
3.13 elements - ×無解
3.14 javascript_metadata - 語言二次決議
3.15 layer_viewer_module - 圖層模塊 ,對圖層的設定 √可學習 √可改
默認的基數z-index:9000 0->1->2->3->4
取決于Node的型別
3.16 quick_open_module -快速打開模塊 ,你為某一moudule勾選了模塊后的匯入
3.17profiler - 檢查機制 時刻檢查你的語法
其實只對class屬性生效
3.18sdk_test_runner - 模擬器啟動 ,如果你以模擬器啟動除錯的話
3.19 timeline - 由cc生成的時間軸影片
4.cocos creator-engine 引擎內核渲染
4.1 bin -》 cocos2d-jsb
在你除錯時,這個檔案會處理除錯的資訊,進行傳遞或拋出例外
你可以漢化它的 “1001”:“xxxxxxxxx”,對以后的開發進行加速
這樣你看到一些英文的時候,可以立即想到哪些問題
4.2 cocos2d 是整文中的重點
4.2.1 actions +animation -運動影片-
理解cc的影片先要理解它的坐標系,本文有講;
理解坐標系后,可以進階,捕捉或自定義方法,構造簡單的影片
你可以向 actions-index.js 里 require你的方法路徑
CC.tween 可以替代傳統的 actions ,它更為靈活
但不要刻意追求最好的,要寫最適合的!不是你有了Gucci,Nike就不香了
4.2.2 audio-音頻
CC.audio 對音頻的構造 使用了狀態標記
這樣便于多個子集的音頻管理
想象一下你的一個頁面里,幾百個音頻如果同時播放,不是亂套了?
你設定了ture和false,然后cc幫你設定了一個狀態集,
4.2.3 compression- 壓縮
是目前大多數人很頭疼的事情,有些技術,只專注寫程式,不管其它的組件大小,資源大小,
New prefab 很多人認為它就是 生成了一個,于是很多地方都用prefab,最后整個專案成千上百個組件,
為什么你在本機寫了這么多,你沒有感到卡頓?因為你已經有了運行和快取\和log快取,cc可以很快速的幫你指定prefab的位置;但你的工程考給別人,這個人的加載就會變的很慢!一直到他除錯把整個游戲跑了一遍后,下次啟動才沒有這么卡頓,
卡頓原因:
1.所有的資源打包后,沒有快取和日志了,所以會很卡(暫時的)
2.專案沒有做好壓縮優化
3.重復書寫的高效率,低解釋語法太多了
4.2.4 core -核心
CCNode.js
對節點的操作-選擇,旋轉,點擊等操作
CCGame.js
對游戲的渲染型別判斷,取決于瀏覽器的回呼回傳
你的游戲頁面邏輯渲染,統統由這個檔案來判斷是否執行生效
組件
assets
- CCAudioClip-音頻剪輯
- CCBitmapFont-bitmap字體
- CCLabelAtlas-標簽集
- CCPrefab-預制體
還有一些沒有列出來的,組件,有能力,可以自己看看它們的定義
這里只是告訴大家這里有什么
camera
CCCamera 對相機的定義
攝像機在制作卷軸或是其他需要移動螢屏的游戲時比較有用,使用攝像機將會比移動節點來移動螢屏更加高效,
如果你對你的2D相機,不是很滿意,你可以修改它的縮放比率
- @property {Number} zoomRatio
以及他的模式,裁切,過濾色,
4.2.5 webview
這是所有個人發開者,公司,必須會用的功能
如:激勵廣告
CCWebView
#zh WebView 組件,用于在游戲中顯示網頁,由于不同平臺對于 WebView 組件的授權、API、控制方式都不同,還沒有形成統一的標準,所以目前只支持 Web、iOS 和 Android 平臺,
各位可能在實際開發中遇到的問題:
1.webview視圖被遮擋
2.打不開指定的網頁
3.被攔截
想知道自己的呼叫,是否成功或失敗
webviewEvents: {
default: [],
type: cc.Component.EventHandler,
},
應該拿到它的回呼,來看回傳資訊
- 設定 JavaScript 介面方案(與 ‘setOnJSCallback’ 配套使用)
- 當加載 URL 以 JavaScript 介面方案開始時呼叫這個回呼函式,
setOnJSCallback (callback) {
if (this._impl) {
this._impl.setOnJSCallback(callback);
}
},
執行 WebView 內部頁面腳本
需要自行解決跨域問題
evaluateJS (str) {
if (this._impl) {
this._impl.evaluateJS(str);
}
},
你必須使用,node.on來監聽
因為此事件是從該組件所屬的 Node 上面派發出來的
- 如果你不再使用 WebView,并且組件未添加到場景中,那么你必須手動對組件或所在節點呼叫 destroy,
- 這樣才能移除網頁上的 DOM 節點,避免 Web 平臺記憶體泄露,
如果你想要修改WebView的界面樣式
- 打開webview-impl
- _createDom 是創造的元素
- createDomElementIfNeeded 是構造的樣式
- WebViewImpl.EventType 里有4種狀態碼
- 在W.V.E.T 下方有 判斷設備型別
//如果你在上方修改了,那么建議你在新建一個自己的方法,呼叫官方的方法,來傳值
//因為不知道會關聯多少方法的值,所以謹慎一些
//------------------------------------------------
//然后在你要的設備型別下執行你的方法,那么屬于你想要的顯示樣式就可以實作了
//這種方法不同于你在CC里的直接顯示方式!
if (sys.os === sys.OS_IOS)
polyfill.enableDiv = true;
if (sys.isMobile) {
if (sys.browserType === sys.BROWSER_TYPE_FIREFOX) {
polyfill.enableBG = true;
}
}
else {
if (sys.browserType === sys.BROWSER_TYPE_IE) {
polyfill.closeHistory = true;
}
}
日常里基本會遇到的問題,再次提供的思路,是方便各位深度理解CC原理;
文章到此,我是大菠蘿~
如果說的不對的地方,歡迎切磋呢!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/256395.html
標籤:其他
