当前位置: 首页 > news >正文

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,需要删除掉那些无效的引用。

相关文章:

  • 【PyTroch学习-001】从一个简单示例开始:手写数字识别
  • 写作-- 复合句练习
  • Python训练营打卡Day40(2025.5.30)
  • Java System类核心用法详解
  • Nginx Lua模块(OpenResty)实战:动态化、智能化你的Nginx,实现复杂Web逻辑 (2025)
  • 关于表连接
  • svg的制作与动态效果的开发使用
  • 智能路由革命:AI 生态系统的智能高速交警
  • 在 Linux 上安装 Minikube:轻松搭建本地 Kubernetes 单节点集群
  • 每日八股文5.30
  • C++17新特性 类型推导
  • 【C语言编译与链接】--翻译环境和运行环境,预处理,编译,汇编,链接
  • @Pushgateway配置与使用
  • 工商业储能站能量管理系统
  • 2014药柜设计问题
  • MOT challenge使用方法及数据集说明
  • 我的3种AI写作节奏搭配模型,适合不同类型写作者
  • 【js逆向】某某省过验证码逆向
  • 从印巴空战看数据制胜密码:元数据如何赋能数字战场
  • N2语法 状態
  • 网站建设什么公司好/平台运营
  • 网吧网站怎么做的/百度资源提交
  • 个人网站 可以做论坛吗/百度一下官网入口
  • 衢州市住房建设局 网站/国内打开google网页的方法
  • 做网站维护是什么岗位/全面网络推广营销策划
  • 工商局网站清算组备案怎么做/seo提供服务