最近把项目从 1.10.2 升级到 2.0.10, 和大家分享下我们遇到的坑及部分解决方案.
本来挺顺利的, 不到一天就能顺利运行起来了, 基本上就是批量替换的事情.
略麻烦一点是的 cc.pXXX, 没有挨个替换, 写了一个兼容类, 然后把 cc 换成 ccc.
export class ccc {
public static pDistance(v1: cc.Vec2, v2: cc.Vec2): number {
return v1.sub(v2).mag();
}
}
搞定后运行的还不错, 我激动跟 jare 说搞定了, 牛逼吧.
Jare 笑着摸了摸我的头说那就好, 心理可能想的是: 小伙子, 你还是太年轻呀.
果然, 问题来了.
###1. emit 行为发生变化
之前版本和 dispatch 是一致的, 新版本获取到的数据直接就是 userdata, 没关系, 换成 dispatch 就好啦, 简单.
2. richtext 字体默认成了系统字体
之前设置了自定义字体的 richtext 升级版本后变成系统字体, 批量换一下就好了嘛, 哈哈.
3. toggle 在 onload 之前改动会被还原回去
这个有点厉害了, toggle onload 前调用 check onload 后还是 uncheck 的状态, 没关系, 记录下状态, onload 之后再设置, 我强装镇定, 心里有一丝慌乱.
4. 加了 Mask 组件的 Node 添加触摸事件无效
新手引导时踩到了这个坑, 小伙伴也就排查了一下午而已(滴血); 没关系, 换一个节点加 touch 事件就好了呀.
5. 粒子
升级前看到论坛里有人说类似的问题, 有了一丝准备. 万万没想到还是掉进了这个深坑, 直接表现就是粒子效果和 ParticleDesigner 中不一样, 有的好解决(位置/混合模式), 有的就毫无头绪了.
比如这个: https://forum.cocos.com/t/2-0-10/80144
6. Label / RichLabel 性能问题
说道这里已经想死了, 10 倍性能差距可能有点夸张了, 但是绝对在 5 倍以上, 之前辛苦换成漂亮的富文本全都得换回 BMFont, 幸好还没有搞多语言, 要不删库跑路的心态都有了.
7. 卡死
必杀技, js 出错 (比如: 给 Lable 的 string 赋值为 undefined) 可能会导致循环出错, 游戏直接卡死…
ERROR: src/cocos2d-jsb.js 0 Uncaught TypeError: Cannot read property '_assembler' of null [0]204._proto._render@src/cocos2d-jsb.js:39179
[1]204._proto._worldTransform@src/cocos2d-jsb.js:39157
[2]204._proto._localTransform@src/cocos2d-jsb.js:39128
不说了, 回去改 BUG 了, 要是我还活着的话, 会继续更新这个帖子的.

哈哈