Cocos Creator v1.6正式版發(fā)布啦!
Cocos Creator v1.6 版本發(fā)布了!感謝社區(qū)對這個版本漫長測試周期的耐心等待和對測試版的積極試用和反饋。我們在這個版本更新中繼續(xù)保持了優(yōu)化性能和提升體驗的傳統(tǒng),并且這個版本還是后續(xù)一系列重要的引擎進化的開始。
我們希望改善開發(fā)者編輯器使用體驗的同時,不斷提升 JS 和 C++ 引擎的性能,解決開發(fā)者最關(guān)心的包體、緩存、網(wǎng)絡(luò)通訊等問題。基于這個目標(biāo),我們在 v1.6 版本中加入了下列重要功能。
特色功能
- JavaScript-Binding 綁定層升級,大幅提升安卓平臺性能
- 預(yù)覽游戲時腳本免打包,改動腳本后瞬間刷新游戲
- 批量編輯節(jié)點和組件屬性
- web平臺構(gòu)建時自動將版本加入資源文件名
- 升級 iOS 平臺的 WebSocket 庫,解決大部分平臺專屬網(wǎng)絡(luò)通訊問題
JavaScript-Binding 綁定層全面升級
在這個版本中,我們升級了從 JavaScript 腳本到原生平臺 C++ 綁定的中間層,一方面我們將原生平臺使用的 JavaScript 引擎 SpiderMonkey 從 v33 版本升級到了 v52 版本,大幅度提高了安卓平臺的 JavaScript 運行性能(由于 iOS 平臺上不支持開啟 JIT 所以效果并不明顯);另一方面我們在這個版本開始對綁定層接口進行重構(gòu),目標(biāo)是:
- 提供完全抽象的 JSB 綁定層 API,獨立于 JavaScript 引擎,用戶的綁定代碼將不再受未來 JS 引擎升級影響
- 支持平臺原生的 JS 引擎,包括 Android 平臺的 v8,iOS 平臺的 JavaScriptCore。
在升級綁定層后,我們不僅為后續(xù)開發(fā)者的 C++ 層綁定開發(fā)提供了穩(wěn)定的環(huán)境,而且支持原生平臺的 JS 引擎會使得構(gòu)建原生版本時的包體大幅減小,因為不再需要將 SpiderMonkey 引擎庫加入到發(fā)布版本中。
預(yù)覽游戲時腳本免打包
由于腳本模塊化加載的需要,我們從 Cocos Creator ***個版本開始就對用戶的腳本進行編譯打包,但對于規(guī)模龐大、動輒幾百個腳本的項目來說,每次修改任何腳本都會觸發(fā)整個編譯打包流程,會使得修改腳本后的等待時間非常長。為了解決這個問題,我們從 v1.6 開始引入了編輯器環(huán)境下腳本免打包的模塊化系統(tǒng),可以在預(yù)覽環(huán)境下分別加載單個文件的腳本。對任何腳本的改動將只觸發(fā)該腳本本身的編譯流程,使得開發(fā)腳本后刷新預(yù)覽的周期縮短到1~2秒,大大提升開發(fā)效率。
目前構(gòu)建后的腳本仍然需要進行打包,因為終端瀏覽器里沒有相應(yīng)的加載環(huán)境。我們會在后續(xù)繼續(xù)研究構(gòu)建發(fā)布時也能保持每個腳本文件獨立存在的構(gòu)建模式,來方便需要分別更新腳本的開發(fā)者更容易部署游戲版本。
批量編輯節(jié)點和組件屬性
編輯 UI 場景時,經(jīng)常會遇到需要選中一些節(jié)點并批量修改他們的一些屬性的需要,這個版本我們加入了屬性檢查器的批量編輯功能。
多選節(jié)點后這些節(jié)點上共享的組件和屬性就可以進行批量編輯了,當(dāng)不同節(jié)點的某個屬性值不同時,選中這些節(jié)點后,屬性檢查器上這個屬性值會顯示為 -, 修改這個屬性會讓所有選中節(jié)點上該屬性都變成同樣的值。
web 平臺構(gòu)建時為資源文件名加入版本號
對 H5 游戲開發(fā)者來說,有效利用瀏覽器的緩存機制,避免用戶重復(fù)下載資源,并且在更新游戲資源時確保更新緩存的資源版本是非常重要的。我們在這個版本的構(gòu)建發(fā)布面板里增加了 **md5 cache** 構(gòu)建選項,勾選后會在構(gòu)建時為所有資源文件名增加該文件的 md5 碼。這樣在更新游戲版本時,根據(jù)文件名的不同,用戶的瀏覽器會自動重新下載 md5 改變了的資源,在***限度使用緩存節(jié)省流量的情況下確保版本的一致性。
iOS 平臺上使用 SocketRocket 代替之前的 WebSocket 實現(xiàn)
我們用 facebook 開發(fā)的 [SocketRocket 庫](https://github.com/facebook/socketrocket) 替換了之前一直在 cocos2d-x 和 Cocos Creator C++ 引擎中使用的 libWebsocket 庫,這個全新的實現(xiàn)支持以下特性:
- SocketRocket 提供異步 API,更符合通訊習(xí)慣
- 封裝了跨線程通訊
- 網(wǎng)絡(luò)狀態(tài)變更時不會造成連接關(guān)閉
- 鎖定手機設(shè)備屏幕不再造成報錯
- 不再依賴包體較大的 openssl 庫
- 使用 wss 連接時不再需要本地 CA 根證書
后續(xù)版本中我們會對 socket.io 的原生實現(xiàn)也進行進一步的優(yōu)化,希望能為開發(fā)者們提供一個簡單、穩(wěn)定的網(wǎng)絡(luò)通訊編程環(huán)境。
完整改動列表
- [Audio] [Breaking] 修復(fù) `audioEngine.stop` 會觸發(fā) finish 事件回調(diào)的問題,現(xiàn)在 setFinishCallback 設(shè)置的 callback 只有在自然播放結(jié)束的時候
編輯器
- [Editor] 加入預(yù)覽游戲時免編譯腳本的模式,免編譯模式下 VSCode 的調(diào)試配置需要通過開發(fā)者菜單更新
- [Editor] 移除內(nèi)置代碼編輯器,默認雙擊文本文件時會使用系統(tǒng)默認的應(yīng)用打開
- [Editor] 修復(fù) Windows 上編輯器運行路徑和項目路徑不在同一個驅(qū)動器時加載腳本路徑錯誤的問題
- [Editor] 修復(fù)導(dǎo)出場景資源時引用量過大可能導(dǎo)致卡死的問題
- [Editor] 修復(fù) require 第三方庫時的報錯 `can not find module for path : undefined`
- [Editor] editor-input 和 editor-textarea 控件添加 maxLength 支持
- [Editor] 禁止彈出和關(guān)閉部分核心面板,包括場景編輯器、資源管理器和節(jié)點樹。
- [Editor] 修復(fù) TS 腳本在重命名后,舊的不會刪掉導(dǎo)致腳本名稱重復(fù)的問題。
- [Editor] 修復(fù)場景保存時仍有 “Cannot read property ‘_prefab’ of null” 的報錯
- [Editor] 修復(fù) property 裝飾器在新版 VSCode 中的報錯
- [Editor] 修復(fù)項目中腳本過多時會出現(xiàn) `too many open files` 的問題
- [Editor] 修復(fù)編輯器中無法通過 url 加載資源依賴的 raw asset 的問題,修復(fù)編輯器無法正確加載 TSX 資源的問題
- [Editor] 修復(fù)編輯器里腳本文件加載順序不固定的問題
- [Editor] 修復(fù)切換場景編輯模式時可能出現(xiàn) `Possible EventEmitter memory leak detected` 的報錯問題
- [Editor] 修復(fù)創(chuàng)建 ToggleGroup 時報錯的問題
- [Editor] 修復(fù)選中編輯 plist 中的 spriteFrame 時可能 Sprite Editor 窗口會卡死的問題
- [Build] 構(gòu)建 Web 端時加入插入 eruda 的選項
- [Build] 修復(fù) windows 平臺上構(gòu)建 web 時使用 md5 cache 報錯的問題。
- [Build] 構(gòu)建時壓縮和合并資源 uuid,以優(yōu)化 settings.js 資源索引文件的體積。
- [Build] 修復(fù)某些項目會在 build-raw-assets 時卡住不動的問題
- [Build] 修復(fù)構(gòu)建非調(diào)試版本時 settings.js 未被壓縮的問題
- [Build] 修復(fù)構(gòu)建時添加 md5 cache 導(dǎo)致部分組件無法正確獲取資源引用的問題
- [Build] 修復(fù)構(gòu)建 Android 時每次都會重新編譯的問題
- [Build] 修復(fù) TTF label 在使用 md5 cache 無法正確下載資源與加載字體的 bug
- [Build] 修復(fù)較低版本 Xcode 在編譯 iOS/Mac 工程時可能遇到的 `undefined symbol: NSStreamNetworkServiceTypeCallSignaling` 編譯失敗問題
- [Build] 在 web 構(gòu)建面板上面添加 md5Cache 選項,為資源文件名增加 md5 編碼,用于正確更新客戶端資源緩存。
- [Build] 修復(fù)構(gòu)建項目時,粒子系統(tǒng)的 plist 所在目錄下的所有貼圖會被強制導(dǎo)出的問題。修復(fù)構(gòu)建項目后粒子 plist 里引用的資源 uuid 和壓縮后的 uuid 不符。
- [AnySDK] 支持構(gòu)建時動態(tài)添加 AnySDK 依賴,默認構(gòu)建的工程不包含 AnySDK 代碼。
- [ProjectSettings] 引擎模塊選擇界面增加全選選項
- [Preferences] 為偏好設(shè)置面板添加 tooltip
- [AssetDB] 修復(fù) jpg 格式的貼圖資源無法被刪除或改名的問題
- [Properties] 修復(fù)組件屬性由數(shù)組類型改回普通類型時,屬性檢查器不會自動重置和刷新的問題
- [Properties] 修復(fù) event-prop 無法指定 tooltip 的問題
- [Properties] 修復(fù)屬性檢查器上預(yù)覽 Markdown 文件出錯的問題
- [Properties] 允許多選節(jié)點后在屬性檢查器里批量修改屬性
- [Properties] 修復(fù) Script 內(nèi)數(shù)據(jù)結(jié)構(gòu)內(nèi)繼續(xù)嵌套 array 之后無法顯示的問題
- [Properties] 修復(fù) Properties 查詢超時后,面板停止了 node 的狀態(tài)更新,直到重新點擊 node 后,才重新啟動更新的問題
- [Properties] 修復(fù)在組件的腳本資源欄上點擊無法跳轉(zhuǎn)到腳本資源所在位置的問題
- [TypeScript] 升級內(nèi)置 typescript 編譯器到 2.4 版本
- [Store] 改進擴展商店下載體驗,增加了安裝失敗和解壓失敗的時候的提示,使用擴展包名作為下載壓縮包的文件名。
- [Store] 插件商店產(chǎn)品描述支持 markdown 格式
- [Store] 改進擴展商店體驗
- 修復(fù)重復(fù)下載文件的時候出現(xiàn)報錯的問題
- 加快刪除文件夾的速度(之前用 Utils.remove 每個文件刪除的時候都有延遲,只有刪除 watch 的文件夾需要用)
- 安裝失敗后,提示復(fù)制到某個文件夾后,自動打開這個文件夾
- 把 Editor.error 統(tǒng)一換成 Editor.warn
- 增加安裝完成后的提示
- 統(tǒng)一整理了一下錯誤的打印消息,出現(xiàn)錯誤的時候,都會顯示一個 warn
- 允許同時安裝多個插件
引擎
- [Engine] 添加 `Node.insertChild` 接口,用于插入節(jié)點到某一層級下特定位置。
- [Engine] 使用 SocketRocket 第三方庫代替原來 iOS 上的 WebSocket 實現(xiàn)
- SocketRocket 提供異步 API,更符合通訊習(xí)慣
- 封裝了跨線程通訊
- 網(wǎng)絡(luò)狀態(tài)變更時不會造成連接關(guān)閉
- 鎖定手機設(shè)備屏幕不再造成報錯
- 不再依賴包體較大的 openssl 庫
- 使用 wss 連接時不再需要本地 CA 根證書
- [Engine] 修復(fù)使用 `evalstring` 調(diào)用的方法返回類型為 void 時會出錯的問題
- [Engine] 修復(fù) Spidermonkey v52 在 iOS 模擬器上創(chuàng)建 TypedArray 崩潰的問題
- [Engine] 修復(fù) loadResDir 加載好的資源排序不穩(wěn)定的問題
- [Engine] 修復(fù) Mask 的 IMAGE_STENCIL 模式在場景勾選延遲加載資源時失效
- [Engine] 支持在項目中使用 CC_BUILD 和 CC_DEBUG 預(yù)編譯宏
- [Engine] 修復(fù) Mask 的節(jié)點 setContentSize 無效果的問題
- [Engine] 修復(fù) jsb 不兼容 TypeScript 里的 promise 用法問題
- [Engine] Fix potential crash after WebSocket.close and send onclose event after onerror is received
- [Engine] 移除引擎裁剪后殘留在包體中的 ZipUtils 和 TiledMap 有關(guān)模塊(減小核心包大?。?o:p>
- [Engine] 為 SGLabel 增加對象池,減少內(nèi)存開銷,提升反序列化效率。
- [Engine] Fix DebugInfos not included in jsb issue
- [Engine] Fix director event before update missing issue (user reported issue)
- [Engine] Increase default max batch vertex count (improvement)
- [Engine] 修復(fù) `cc.game.restart()` 調(diào)用會導(dǎo)致崩潰的問題
- [Engine] 只有在預(yù)覽和調(diào)試模式下才獲取 webgl 錯誤,減少發(fā)布版的性能損耗
- [Engine] 修復(fù) `color.fromHEX` 輸出的顏色值不正確的問題
- [Engine] 修復(fù)一個 component 有多個 schedule 的時候 unschedule 可能出錯
- [Engine] 修復(fù) XMLHttpRequest timeout 無法設(shè)置的問題
- [Engine] 修復(fù)粒子和拖尾效果的 z 值不正確的問題
- [Engine] 預(yù)覽游戲切換場景時增加更多調(diào)試信息,包括場景資源 uuid 和初始化每一步驟所用的時間
- [Engine] 創(chuàng)建新的 Label 渲染對象時,使用對象池而不是 new
- [Engine] 修復(fù)原生平臺上使用 LabelOutline 時退出游戲會導(dǎo)致崩潰的問題
- [Engine] 統(tǒng)一 scheduler 在 web 和原生的參數(shù)簽名,必須使用6個參數(shù)或4個參數(shù)才能正確工作。
- [Engine] 修復(fù)編輯器里加載粒子資源時報錯的問題
- [Engine] 修復(fù) `cc.game.restart` 會導(dǎo)致 Web 平臺崩潰的問題
- [Engine] 升級了引擎編譯時使用 `gulp-uglify` 版本,如果用了自己定制的引擎,需要同步引擎 repo 的 `package.json` 并重新安裝***依賴。
- [Engine] 修復(fù) tint action 同時改變了 alpha,導(dǎo)致從 sgNode 同步 color 到 Node 過程中傳遞的 color.a 不等于 255 而報錯的問題
- [Audio] 修復(fù)某些版本的 IE 11 在 audio 沒加載完成的情況下,設(shè)置 currentTime 會報錯的問題
- [Audio] 修復(fù) AudioSource 初始化時加載聲音操作可能造成聲音播放停止的問題
- [Audio] 修復(fù)設(shè)置音量為 0 時無效的問題
- [Audio] 修復(fù)多條音軌同時播放并頻繁調(diào)用 `_play2d(AudioCache *cache, int audioID)` 時的崩潰問題。
- [Audio] 修復(fù) Audio DOM 模式在構(gòu)建的時候執(zhí)行 md5 cache 后,找不到資源的問題
- [Render] 默認關(guān)閉臟矩形渲染優(yōu)化,可以通過設(shè)置 cc.renderer.enableDirtyRegion(true) 來開啟。
- [Action] 解決 ActionManager 在 update 過程中刪除 action 導(dǎo)致的報錯,包括:salvaged 狀態(tài)去除之后,沒有對正在執(zhí)行(可能被移除)的 action 做保護;action 被移除后(放入對象池)可能會立即被復(fù)用,導(dǎo)致 ActionManager 中的狀態(tài)問題。
- [Action] 修復(fù)當(dāng) callFunc 的 target 為 null or undefined 時,jsb::Object 仍然會去 bind proxy 導(dǎo)致報錯的問題
- [Action] 修復(fù)帶基本數(shù)據(jù)類型參數(shù)的 callFunc 創(chuàng)建崩潰
- [JSB] Improve setTimeout, setInterval implementation
組件
- [Label] 優(yōu)化 BMFont 解析速度,目前 BMFont 的解析直接在編輯器導(dǎo)入的時候就完成了,不需要運行時解析。
- [Label] 拆分 `setFontFileOrFamily` 為 `setFontFamily` 和 `setFontAsset`
- [Label] 改進 TTF 字體的創(chuàng)建效率
- [BMFont] 改進具有多張貼圖的 BMFont 資源,在索引貼圖時可能出現(xiàn)路徑太長出錯的問題
- [BMFont] 修復(fù)在原本使用位圖字體的組件上點擊 useSystemFont 導(dǎo)致會出現(xiàn) 2 個 Label 的問題
- [RichText] 修復(fù)禁用 RichText 組件或節(jié)點時沒有反注冊點擊事件的問題
- [PageView] 添加新屬性 pageTurningSpeed
- [Spine] 支持 Spine 多骨骼之間的批處理渲染
- [Spine] 修復(fù) Spine 原生平臺上使用 addAnimation 后動畫可能無法正確播放的問題
- [Tiledmap] 修復(fù)原生平臺上 TiledMap 在使用 getPropertiesForGID 時,如果該圖塊沒有設(shè)置 Custom Propertie 時會報錯的問題
- [Tiledmap] 修復(fù) Tilemap 不能正確被 camera culling 的問題
- [Tiledmap] 添加到 camera 上的時候,退出場景時,camera 無法清除 Tiledmap 的 sgNode
- [Tiledmap] 開啟 DepthTest 讓 tiledmap Z 軸生效
- [Animation] 修復(fù)修改 sample 屬性時報錯的問題
- [Animation] 優(yōu)化幀動畫性能
- [Component] 修復(fù)在包含渲染組件的節(jié)點上添加 SpriteDistortion 組件時的報錯
- [Component] 增加 cc.BlockInputEvents 組件便于遮擋 UI 事件
- [Particle] 修復(fù)當(dāng)粒子的 file 為 null 的時候無法導(dǎo)出資源的 bug
- [Particle] 修復(fù) endColorVar 屬性顯示丟失的問題
- [Physics] 修復(fù)使用 Joint 時由于調(diào)用 destroy 方法導(dǎo)致的崩潰問題
- [Physics] 為 PhysicsManager 添加 `enabledAccumulator` 選項,用于提供固定時間的物理更新
- [Physics] 默認關(guān)閉添加 polygon collider 時就自動識別圖片生成頂點,如果用戶需要,可以通過點擊按鈕來生成頂點
- [VideoPlayer] 修復(fù) VideoPlayer 在構(gòu)建的時候執(zhí)行 md5 cache 后,找不到資源的問題
強烈推薦小伙伴們下載升級v1.6版本,它解決了Creator用戶一直以來迫切需要但又暫未處理的問題。升級完,記得到社區(qū)forum.cocos.com提交使用反饋哦!