最近,我将之前用 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星球游戏开发社区

如何优雅地升级一个Creator 2.x 项目到 3.6.2 ?的更多相关文章

  1. 如何简单而优雅地升级Visual NMP中的PHP版本

    需求:自己想测试下不同版本的PHP性能,就想升级下 Visual 这个集成环境中PHP的版本 网上: 升级PHP到5.6.11 1.下载新的nts版的PHP并解压缩到bin\PHP下,保留原文件夹的名 ...

  2. 如何优雅地关闭一个socket

    最近在windows编程时需要考虑到“如何优雅地关闭一个socket”,查阅了一些资料,现将查到的相关资料做个汇编,希望能对后来者有所帮助(比较懒,所以英文资料没有翻译:-)) 1. 关闭Socket ...

  3. 如何优雅地打印一个Java对象?

    你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下). 在一个月黑风高的夜晚,我思前想后,觉得再也不能 ...

  4. 用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建

    一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了.好吧,就叫Trump吧.没有任何含义 ...

  5. react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

    react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...

  6. 从0开始,手把手教你用Vue开发一个答题App01之项目创建及答题设置页面开发

    项目演示 项目演示 项目源码 项目源码 教程说明 本教程适合对Vue基础知识有一点了解,但不懂得综合运用,还未曾使用Vue从头开发过一个小型App的读者.本教程不对所有的Vue知识点进行讲解,而是手把 ...

  7. 《从零开始做一个MEAN全栈项目》(3)

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 上一篇文章给大家讲了一下本项目的开发计划,这一章将会开始着手搭建一个MEAN项目.千里之行,始于足下, ...

  8. 《从零开始做一个MEAN全栈项目》(2)

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习.   上一节简单介绍了什么是MEAN全栈项目,这一节将简要介绍三个内容:(1)一个通用的MEAN项目的技 ...

  9. 如何使用maven建一个web3.0的项目

    使用eclipse手动建一个maven的web project可能会有版本不合适的情况,例如使用spring的websocket需要web3.0什么的,不全面的修改可能会出现各种红叉,甚是苦恼.我从我 ...

  10. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

随机推荐

  1. 纯Vue实现网页日常任务清单小功能(数据存储在浏览器)

    任务清单可以极大提高我们的工作效率.哪些事情办了.哪些事情代办.哪些是紧急需要办的事情等等. 在组件化编码实战3的基础上进一步改进.将原先的数据保存的浏览器中.就可以做到关闭网页也不会丢失数据的情况 ...

  2. 齐博x1{:get_user_money(2,$uid)}

    第一項是積分類型,第二項是用戶的UID, 在模板中用得最多的可能是 {:get_user_money(2,$uid)} 以管理員身份登錄後,在前台任何頁麵,隻要添加了標簽,雙擊就可以進入設置管理,如果 ...

  3. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(3) - 入门Flask微框架

    1.安装Flask 方式一:使用pip命令安装 pip install flask 方式二:源码安装 python setup.py install 验证 第一个Flask程序 程序解释 参数__na ...

  4. 浅谈消息队列 Message Queue

    消息队列:在消息传递的过程中暂时保存消息的容器,充当发送者和接受者的中间人 消息队列的基本操作 using System; using System.Messaging; namespace MQ { ...

  5. 现在入行Java真的还有出路吗?

    现在入行Java还来的及吗?未来该如何抉择? 最近有点迷茫了,互联网好像一夜之间进入了寒冬一样,到处都是就业难的样子,当然,不可否认的是,那些努力的大佬依旧是斩获多个offer,但是,窝就一个小镇做题 ...

  6. 一次 Java log4j2 漏洞导致的生产问题

    一.问题 近期生产在提交了微信小程序审核后(后面会讲到),总会出现一些生产告警,而且持续时间较长.我们查看一些工具和系统相关的,发现把我们的 gateway 差不多打死了. 有一些现象. 网关有很多接 ...

  7. 死磕面试系列,Java到底是值传递还是引用传递?

    Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...

  8. 论文笔记 - Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity

    prompt 的影响因素 Motivation Prompt 中 Example 的排列顺序对模型性能有较大影响(即使已经校准参见好的情况下,选取不同的排列顺序依然会有很大的方差): 校准可以大幅度提 ...

  9. ubuntu基本

    ubuntu使用过程中遇到的指令 apt-get更新 当现出net-tools没有可安装候选 的提示时,可能是apt-get需要更新了.通过指令sudo apt install net-tools p ...

  10. 嵌入式-C语言基础:快速选择排序实现从大到小排序

    #include<stdio.h> int main() { /*简单选择排序:从大到小:一共比较sizeArr-1轮,每一轮的第一个数是arr[i],第一个数依次和它后面的每个数比较*/ ...