最近,我将之前用 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. RE语法

    RE,英文为Regular Expression,中文译作正则表达式.用于文本过滤的工具.RE语法由一些元字符.其它任意字符串作为基本单元,匹配次数.分组匹配.锚定符等为操作单元组成.进行逐行扫描,满 ...

  2. Vue学习之--------计算属性(2022/7/9)

    文章目录 1.计算属性 1.1 计算属性实现 1.1.1 基础知识 1.1.2 代码实例 1.1.3 测试效果 1.2 计算属性简写 1.2.1 简写代码 1.3 使用插值语法实现 1.3.1 代码实 ...

  3. 动词时态=>3.现在时态和过去时态构成详解

    现在时态构成详解 一般现在时态 最容易构成的时态,直接加动词原形(字典当中显示的词条)就可以 第三人称"单数"的话需要加s 这是最容易出错的时态:容易将 现在的时间,和一般的状态: ...

  4. MassTransit | .NET 分布式应用框架

    引言 A free, open-source distributed application framework for .NET. 一个免费.开源的.NET 分布式应用框架. -- MassTran ...

  5. Redis 01: 非关系型数据库 + 配置Redis

    数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...

  6. Python处理刚刚,分钟,小时,天前等时间

    简介 用爬虫获取目标网站数据后可能会遇见时间为处理刚刚,分钟,小时,天前等时间格式,如图 解决问题: 写了一个工具类来处理该问题,其中封装了两个函数 1. 将时间中的中文数字转换成阿拉伯数字 def ...

  7. FHQ Treap 详解

    鲜花 一些鲜花放在前面,平衡树学了很久,但是每学一遍都忘,原因就在于我只能 70% 理解 + 30% 背板子,所以每次都忘.这次我采取了截然不同的策略,自己按照自己的理解打一遍,大获成功(?),大概打 ...

  8. 独立按键控制led灯

    #include "regx51.h"typedef unsigned int u16; void delay_us(u16 time){ while(time--){} }voi ...

  9. C语言实现计算“已经活了多少天”

    输入生日,通过系统或者自己输入,获得当前日期,计算已经存活了多少天. #include<stdio.h> #include<time.h> /** * 函数介绍: * 通过输入 ...

  10. 使用kubeadm方式搭建K8S集群

    使用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Ma ...