cocosCreator 1.8 升級到 2.4

現在負責的一個運營中的商業項目,使用的是 cocosCreator1.8,之前沒有做好設計,所以東西都是直接加載在內存中的,到了現在性能問題逐漸暴露出來,討論之后想進行引擎升級,升級到cocosCreator 2.4。

官方的升級文檔:
1.10以后的資源升級 https://docs.cocos.com/creator/2.4/manual/zh/release-notes/raw-asset-migration.html
2.0 升級 https://docs.cocos.com/creator/2.4/manual/zh/release-notes/upgrade-guide-v2.0.html

2.x 相對于 1.x 核心仍然使用的是 cocos2dx,只是在js部分有了一些改動,所以升級應該是沒有大問題,但是小問題仍然是有不少,這里我們計劃按照:項目能跑起來、打包APK進行全量的玩法測試、有端渠道進行發布、小游戲渠道發布。

升級遇到的問題

1.文本的問題
文本設置了Line Height 之后 會發現 Node 的高度比這個值要大一些,1.8版本就沒有這個問題。據說是因為TTF紋理的會有點偏移,引擎組為了矯正位置加上了偏移,然后對Node的高度進行放大。這里有兩個參數,修改一下即可:

// text_utils.js
-let _BASELINE_RATIO = 0.26;
-let _BASELINE_OFFSET = 0;
+let _BASELINE_RATIO = 0; //0.26;
+let _BASELINE_OFFSET = -0.13;

參考1:解決字體本身攜帶的向上/向下偏移量問題
參考2: 2.1.2版本label的size不可編輯且固定都是FontSize的1.26倍,是故意設計成這樣的么?
參考3: 3.3RichText問題

之前代碼中有設置 文本string 然后依賴節點的size進行判斷的代碼,升級后不生效了,因為新版本不會在設置完后立刻進行更新,如果有類似的邏輯,需要手動先調用cc.Label的 _forceUpdateRenderData();

2.EditBox
升級后功能失效,無法點擊,是因為新版本 EditBox的子節點Size有問題,我這里代碼里直接打補丁把所有都處理一下:

let setupEditBoxWidget = function(node) {let textWidget = node.getComponent(cc.Widget);if (!textWidget) {textWidget = node.addComponent(cc.Widget);textWidget.isAlignTop = true;textWidget.top = 0;textWidget.isAlignBottom = true;textWidget.bottom = 0;textWidget.isAlignLeft = true;textWidget.left = 0;textWidget.isAlignRight = true;textWidget.right = 0;textWidget.updateAlignment();}
}
let oldOnEnable = cc.EditBox.prototype.onEnable
cc.EditBox.prototype.onEnable = function(){oldOnEnable.call(this);setupEditBoxWidget(this.textLabel);setupEditBoxWidget(this.placeholderLabel);
}

3.rotation
這個新版本推薦使用angle 代替 rotation,其中 angle = -rotation; 即之前rotation > 0 是順時針旋轉,而angle >0 是逆時針旋轉。這里比較坑的是編輯器里是按照angle的邏輯來的但key顯示的卻是Rotation。
在這里插入圖片描述
4.event
這個官方文檔里有提到:

// **v1.x**
eventTarget.on(type, function (event) {// 通過 event.detail 獲取 emit 時傳遞的參數
});
eventTarget.emit(type, message); // message 會被保存在回調函數的 event 參數的 detail 屬性上// **v2.0**
eventTarget.on(type, function (message, target) {// 直接通過回調參數來獲取 emit 時傳遞的事件參數
});
eventTarget.emit(type, message, eventTarget); // emit 時可以傳遞至多五個額外參數,都會被扁平的直接傳遞給回調函數
  1. camera
    這個官方文檔之前也有提到,之前是給camera 設置targets, 現在需要通過Mask來實現。這個需要新增一個分組,camera改動比較大,可能業務邏輯也需要修改。

6.shader
一般游戲都會用到變灰之類的shader,需要改成使用material,CCButton里有變灰效果的邏輯可以參考一下

一些廢棄的接口 按照報錯處理掉就行了,其中cc.p用的地方太多了,直接重新定義一下: cc.p = cc.v2;
還有一個是 1.8版本的prefab 如果 js腳本/spriteFrame 等丟失,會有warning,但可以運行,新版本會直接無法實例話對應的prefab,需要刪除掉那些無效的引用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907538.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu 制作 ssl 證書

安裝 openssl sudo apt install openssl 生成 SSL 證書 # 生成私鑰 (Private Key) openssl genrsa -out private.key 2048 在當前目錄生成 private.key # 生成證書簽名請求 (CSR - Certificate Signing Request) openssl req -new -key private.key -out certificate.csr -…

【Java基礎-環境搭建-創建項目】IntelliJ IDEA創建Java項目的詳細步驟

在Java開發的世界里,選擇一個強大的集成開發環境(IDE)是邁向高效編程的第一步。而IntelliJ IDEA無疑是Java開發者中最受歡迎的選擇之一。它以其強大的功能、智能的代碼輔助和簡潔的用戶界面,幫助無數開發者快速構建和部署Java項目…

WEB3——什么是ABI

怎么獲得ABI? 在編譯完合約后,可以在左邊下面點擊復制ABI ABI(Application Binary Interface,應用二進制接口)是用來讓前端或服務端 JavaScript 代碼與智能合約進行交互的橋梁,它描述了合約的函數、事件和…

移動安全Android——客戶端數據安全

本地文件權限配置 測試流程 (1)手機運行待測APP應用,adb執行命令找到APP包名 adb shell dumpsys activity top|findstr ACTIVITY (2)adb shell 進入設備,以Root權限進入/data/data/package包名目錄下 c…

拉普拉斯噪聲

1. 概念 拉普拉斯噪聲是一種連續概率分布生成的隨機噪聲,其核心特點是符合拉普拉斯分布。這種噪聲被特意添加到數據(尤其是查詢結果或統計量)中,以實現差分隱私這一嚴格的隱私保護框架。 核心目的: 在保護數據集中的個…

django項目開啟debug頁面操作有數據操作記錄

在項目的主文件中setting中配置 """ Django settings for ProjectPrictice project.Generated by django-admin startproject using Django 3.0.1.For more information on this file, see https://docs.djangoproject.com/en/3.0/topics/settings/For the ful…

【科研繪圖系列】R語言繪制森林圖(forest plot)

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據下載導入數據數據預處理畫圖系統信息介紹 本文介紹使用R語言繪制森林圖(forest plot)的方法。首先加載必要的R包(grid、forestploter、openxlsx、stringr),導入并預處…

MySQL-8.0.42 主從延遲常見原因及解決方法

目錄 1 查看從庫延時方法 2 如何分析主從延遲 3 主從延遲的常見原因及解決方法 1 查看從庫延時方法 mysql> show slave status \G *************************** 1. row *************************** Slave_IO_Running: Yes #兩個yes說明主從復制正常 …

Kotlin 活動事件通訊跳轉深度講解

在 Android 開發的浩瀚海洋中,活動(Activity)間的事件通訊與跳轉猶如構建復雜應用程序的橋梁與紐帶,而 Kotlin 語言的加入,更是為這一過程注入了簡潔、優雅與高效的活力。本文將深入剖析 Kotlin 開發中安卓活動事件通訊跳轉的方方面面,從基礎概念到高級技巧,從代碼示例到…

[FreeRTOS- 野火] - - - 臨界段

一、介紹 臨界段最常出現在對一些全局變量進行操作的場景。 1.1 臨界段的定義 臨界段是指在多任務系統中,一段需要獨占訪問共享資源的代碼。在這段代碼執行期間,必須確保沒有任何其他任務或中斷可以訪問或修改相同的共享資源。 臨界段的主要目的是防…

Vad-R1:通過從感知到認知的思維鏈進行視頻異常推理

文章目錄 速覽摘要1 引言2 相關工作視頻異常檢測與數據集視頻多模態大語言模型具備推理能力的多模態大語言模型 3 方法:Vad-R13.1 從感知到認知的思維鏈(Perception-to-Cognition Chain-of-Thought)3.2 數據集:Vad-Reasoning3.3 A…

CSS Day07

1.搭建項目目錄 2.網頁頭部SEO三大標簽 3.Favicon圖標與版心 (1)Favicon圖標 (2)版心 4.快捷導航 5.頭部-布局 6.頭部-logo 7.頭部-導航 8.頭部-搜索 9頭部-購物車 10.底部-布局 11.底部-服務區域 12.底部-幫助中心 13.底部-版權…

Flutter圖片Image、本地圖片、程程圖片、圓片剪切、圓形圖片

目錄 圖片組件的介紹 1.Image.network加載圖片 1.1 Image scale圖片縮小一倍 1.2 Image alignment使用 1.3 Image fit 屬性的取值及說明 1.3.1 Contain 默認效果 1.3.2 Fill 圖片會縮放至完全填滿目標區域(寬高) 1.3.3 Fill 圖片會縮放至完全填滿目…

Prometheus學習之pushgateway和altermanager組件

[rootnode-exporter41 /usr/local/alertmanager-0.28.1.linux-amd64]# pwd /usr/local/alertmanager-0.28.1.linux-amd64[rootnode-exporter41 /usr/local/alertmanager-0.28.1.linux-amd64]# cat alertmanager.yml # 通用配置 global:resolve_timeout: 5msmtp_from: 914XXXXX…

NHANES指標推薦:CQI

文章題目:The impact of carbohydrate quality index on menopausal symptoms and quality of life in postmenopausal women 中文標題:碳水化合物質量指數對絕經后婦女更年期癥狀和生活質量的影響 發表雜志:BMC Womens Health 影響因子&…

【cpp-httplib】 安裝與使用

cpp-httplib 1. 介紹2. 安裝3. 類與接口3.1 httplib請求3.2 httplib響應3.3 httplib服務端3.4 httplib客戶端 4. 使用4.1 服務端4.2 客戶端 1. 介紹 C HTTP 庫(cpp-httplib)是一個輕量級的 C HTTP 客戶端/服務器庫,它提供了簡單的 API 來創建…

Electron-vite【實戰】MD 編輯器 -- 系統菜單(含菜單封裝,新建文件,打開文件,打開文件夾,保存文件,退出系統)

最終效果 整體架構 src/main/index.ts import { createMenu } from ./menu在 const mainWindow 后 // 加載菜單createMenu(mainWindow)src/main/menu.ts import { BrowserWindow, Menu, MenuItem, MenuItemConstructorOptions, dialog, shell } from electron import fs from…

【第4章 圖像與視頻】4.5 操作圖像的像素

文章目錄 前言示例-獲取和修改圖像數據圖像數據的遍歷方式圖像濾鏡負片濾鏡黑白濾鏡浮雕濾鏡filter濾鏡屬性 前言 getImageData() 與 putImageData() 這兩個方法分別用來獲取圖像的像素信息,以及向圖像中插入像素。與此同時,如果有需要,也可…

【Docker 從入門到實戰全攻略(一):核心概念 + 命令詳解 + 部署案例】

1. 是什么 Docker 是一個用于開發、部署和運行應用程序的開源平臺,它使用 容器化技術 將應用及其依賴打包成獨立的容器,確保應用在不同環境中一致運行。 2. Docker與虛擬機 2.1 Docker(容器化) 容器化是一種輕量級的虛擬化技術…

Vue:axios(POST請求)

發送 POST 請求 基本用法 axios.post(/api/login, {username: lcyyyy,password: 123456 }) .then(response > {console.log(請求成功:, response.data); }) .catch(error > {console.error(請求失敗:, error); });在 Vue 組件中使用 export default {methods: {async …