最近,我将之前用 Cocos Creator 2.x 写的一个微信小游戏《球球要回家》移植到了 Cocos Creator 3.6.2 上。

编程语言也从 JavaScript 迁移到了 TypeScript,并成功上线微信小游戏。

不过在升级过程中,也踩到不少坑。

一是如何将 JS 代码高效地翻译成 TS 代码。

另外是,我在使用 Creator 3.6.2 自带的 2.x 项目升级工具存在 BUG,差点让我放弃升级。

不过还好,遇到的问题通过 Cocos 论坛、文档都能解决,在此做个记录,希望对你也有所帮助。

1. 升级项目到 2.4.x 引擎版本

因为 Creator 3.x 已经不在支持 JavaScript 语言,而且 2.4.x 最新版本的 API 接口与 3.x相近。

所以,我的策略是首将代码移植到 2.4.x TypeScript 上。

这一步,主要是解决一些废弃 API 的问题。

在 2.4.10 上,废弃 API 它不会报错,但会以警告的方式提示你。

据了解 95% 的 2.4.x 以下的项目,升 2.4.5+ 是可以平滑升级的。

2. JS转TS脚本

这一步是个体力活,一是对将 JS 脚本翻译为 TS 脚本,二是将新的 TS 脚本重新挂载节点。

我的做法是,比如:看到有个脚本为:GameScene.js,先在它旁边生成一个 GameSceneTS.ts 照着 JS 代码逻辑,按 TS 语法重写一遍代码。

虽然这是个体力活,但是在 VSCode 中写 TS 代码还是很享受的,智能提示非常的方便。

3. 升级项目引擎到 3.6.x

重点来了,这一步需要使用 Creator 3.x 提供的升级工具来升级项目。

使用升级工具,我们可以不必重新去编辑游戏场景和预制体,重新去挂载脚本,能省去不少时间。

新建一个 Creator 3.x 工程,从编辑器主菜单上 文件→导入 Cocos Creator 2.x 项目,看下图:

浏览需要升级的 2.x 工程目录,会弹出下面这样一个面板:

注意:这里有一个坑点!我最初在导入球球要回家 2.4.10 工程后发现,场景中的 Button 按钮点不动。

为了排除是因为脚本引起的问题,我使用 2.4.10 重新建了一个 Hello World 工程,添加上 Button 按钮,再导入 3.6.2 依然有这个问题,

试了多次无解,我再停下来看导入面板上的说明,打开一个 Github 仓库,是这个 2.x 导入工具的插件最新版本。

看 README 中的更新说明,正好解决了按钮不能点击的问题,以及其他 BUG 的修复。

果断下载插件安装上,再次尝试使用 Hellow World 工程导入 3.x 引擎 Button 点击问题解决!

4. 升级 3.x 脚本代码

UI 完美再现......OK

组件脚本节点绑定在......OK

组件属性、节点引用、组件方法调用一切 OK!

但是,这时点击游戏中的按钮是没有反应的,看代码如下:

从上图可以看到,升级工具将所有代码函数体全部注释起来了,现在要做的就是将所有函数体一个个地放开。

在 2.x 时使用的 cc.xxx 这种写法不能再用了,必须在脚本顶部做导入模块导入:

//从 cc 模块中解构出 Node、Sprite 变量
import { Node, Sprite } from 'cc'

在使用 VSCode 编写代码时,并不需要我们手动一个个敲 import 引入的模块,编辑器会自动添加,看下面:

小结

从 Creator 2.x 移植 3.x 的整体过程,主要为下面四步:

  1. 升级项目到 2.4.10 或最新版;
  2. 移植脚本到 TypeScript;
  3. 在 Creator 3.x 中使用 2.x 项目导入工具(注意使用github上的最新版本);
  4. 修改 3.x 项目中不兼容 2.x 的相关接口代码。

后续我还会有更多 Creator 2.x 升级 3.x 的经验分享,如果本文对你有用,感谢点赞留言!

更多精彩请关注Creator星球游戏开发社区

最新文章

  1. TFS2013 设置签出独占锁
  2. DNS报文格式
  3. (笔记)angular 单选选项卡
  4. AndroidManifest.xml 详解 (四) 之uses-permission
  5. Creating Your Own Server: The Socket API, Part 2
  6. #elif
  7. Oracle RMAN 清除归档日志
  8. android Button 切换背景,实现动态按钮和按钮颜色渐变
  9. RHEL 6.1字符界面无法登录SSH却能登录
  10. jQuery noConflict() 方法
  11. 使用trim方法检测用户输入
  12. phpcms 替换首页
  13. MySQL 表名和字段名不要使用保留字命名
  14. Java知多少(103)网络编程之IP地址和InetAddress类
  15. Qt Quick Dialogs
  16. Android-WebView与本地HTML (互调)
  17. Faiss教程:基础
  18. CSS3盒子模型(下)
  19. WinDBG 常用命令表[转]
  20. C语言数据结构之哈夫曼树及哈夫曼编码的实现

热门文章

  1. echarts的使用 超好用的报表制作、数据的图形化展示
  2. day03-2-拓展
  3. Vitepress搭建组件库文档(下)—— 组件 Demo
  4. 三十一、kubernetes网络介绍
  5. Excel常用需求
  6. mysql网上知识
  7. jvm之垃圾收集一之垃圾回收算法
  8. WSL下的Ubuntu 18.04LTS配置软件源和系统更新
  9. 【Devexpress】pivotGridControl设置不显示展开折叠按钮
  10. Vue2组件间通讯