cocos creator 3.x遇到的一些问题和解决办法

  • Post author:
  • Post category:其他



一、场景文件损坏问题。

现象:一次异常死机,关机重启后,场景文件(cocos creator 3.6.2创建)无法打开,涉及几天的工作,如果无法恢复,损失巨大!感觉太夸张了。

分析:认真分析了场景文件格式,是json格式(可以用visual studio code打开),层次不多,以id进行关联,尝试删除一些小节,结果发现还是打不开,但是提示不一样了,经过进一步分析,终于找到原因所在,一个json子数组出现了null节点,内容保存的是null,导致在解析时,无法正确读取数据。最后,删除此null节点,故障排除。类似故障可以同样处理,备份后尝试删除一些异常节点。

结论:1、cocos creator毕竟是开源软件,系统完备性还是比较差的,bug需要不断修改。导致机器死机很多次了。日常情况下macbook pro几乎都不用重启机器的,但cocos creator平均让我一天启动几次,而且都是硬关机。

2、场景文件采用json格式比较合理,至少给了分析的可能,如果加密或者其他类型格式,简直就无法分析了;

3、场景文件上下级关联采用id方式,较好解决了json过多层级导致太过复杂的问题;

4、还需要继续学习,目前单一场景感觉最后文件太大,不利用团队开发和模块化,应该有更好的处理方式。


二、position问题

在设计设置窗体时花了很多时间。要区分 boundingbox,contentsize,worldposition几个类型地址的差异。

1、event中getlocaiton,getuilocation位置的差异。一个是screen位置,一个world位置。

2、positon通常是针对上级节点的偏移位置;worldpositon是针对屏幕的;

3、boundingbox是在屏幕上的矩阵区域,contentsize是内容大小(可能受缩放影响与实际boundingbox有较大差异)

4、具体关系建议看调试状态代码。


三、引入外部模块

引入模块导致undefined报错,花了一天时间才解决。

比如测试引入uuid功能时,需要导入外部模块,过程是


1、进入visual code的命令行;


2、运行npm install uuid-random 完成安装


3、检查node_modules下uuid-random文件


4、程序导入使用:

两种成功方法


(1)使用$符号:

文件头:import * as $uuid from ‘uuid-random’;

引用部分:this._teamID = $uuid.default();

和:$uuid.default.bin().toString();

这种方法会提示语法错误,但可以正常运行;


(2)正确做法,修改tsconfig.json,增加缺省导入为真

  "compilerOptions": {
    "allowSyntheticDefaultImports": true
  }

文件头及使用:

import uuid from 'uuid-random';
//代码使用
this._teamID = uuid();


5、打包出现错误

提示:

[Build] [build-script]ModuleNotFoundError: (i18n needed)resolve_error_module_not_found: {“specifier”:”crypto”,”parentURL”:”file:///Users/xxxxx/xxxx/xxx/node_modules/uuid-random/index.js”}

这句话很容易混淆,以为找不到的是index.js文件,实际上是crypto.js文件找不到

解决办法:

在 index.js文件中将require(‘crypto’)删除即可


6、引入外部js文件格式

1)具体看uuid.js和encryptjs.js 示例,增加了.d.ts文件

(2)import写法很重要,如:

import crypto from “./encryptjs.js”

如果js文件中又引用了其他文件,很多时候很难通过;

(3)必须注意在浏览器通过,不意味原生平台可以通过,必须仔细测试。

(4)因为ts检查严格,而js不严格,调试可能出现代码错误,需要修改。如encryptjs.js文件中 增加 c3变量定义和初始化值设定。


7、安卓证书申请过程

(1)keytool -genkey -alias xxxxx -keyalg RSA -keysize 2048 -validity 36500 -keystore xxxx.keystore

-alias 之后 跟随您自定义的别名;请输入英文

-keysize 默认2048

-validity 默认36500,证书有效期100年,您可以根据自己时间节点定义,比如365,代表有效期365天;

-keystore 自定义文件名.keystore 自定义的文件名,请输入英文

(2)密码 xxxxxx,名字:xxx

CN=xxxx, OU=xxxx xxxx, O=xxxx xxxx, L=Chengdu, ST=Sichuan, C=CN

(3)最后生成xxxx.keystore 签名文件


8、安卓重新签名发布

导致安装到手机无法成功,原因是已经安装了一个同名应用(其实就是签名不同),只有将原来应用删除方能继续安装。


9、同步加载json资源

原生采用load方式,必须异步,很多时候,希望简化逻辑,同步加载json资源,怎么办?

采用ts代码中属性增加jsonasset属性方式,在编辑时将需要的json文件拖到对应属性即可,然后代码中直接访问,实现同步。例如:

    //配置文件同步加载
    @property(JsonAsset)
    public preLoadConfig: JsonAsset = null;



四、缺省浏览器启动错误

现象是cocos creator 3.7启动后,运行浏览器预览程序,本来应该是chrome但启动了safari。这个是3.7的bug,下个版本估计会修复,之前的版本也没有类似错误。

解决办法:

很简单,每次启动cocos creator后,点击菜单->cocos creator ->设置->程序管理器->默认浏览器 点击一下即可,无需修改,退出菜单,你会发现启动正确了。

比较遗憾的是这个bug导致每次启动cocos creator 都会重复一遍这个操作。

下面是我用cocos creator 3.7.1开发的微信小游戏,欢迎使用:



版权声明:本文为a17432025原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。