cocos creator 3.x遇到的一些问题和解决办法
一、场景文件损坏问题。
现象:一次异常死机,关机重启后,场景文件(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开发的微信小游戏,欢迎使用:
来源地址:https://blog.csdn.net/a17432025/article/details/128833122
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341