【官网已更新】Cocos Creator 3.0 rc 偷跑

image
image
动画的预烘焙,好像有点问题,我这个动画,不勾选预烘焙,是可以正常播放的,但是如果勾选预烘焙,Body_0这个的动画,就播放不了了,而且在某些安卓的机型还会出现穿模,渲染不完整。
不用预烘焙的话,是正常的
这个动画是3DMAX做的,里面是有两个动画组成的,导出fbx过来用的,用预烘焙只播放了一个动画,另外一个是静止的

问题就在这了。
为什么不支持 import { XX } from ‘…’ 的形式呀?这是ES6和TypeScript的标准语法呀

重点是

 import kw8 from '...'

这种引用方式,与TypeScript本身编译后导出的类型定义不一致,因为本身没有导出default
参见 node_modules/k8w-local-storage/index.d.ts

因为现在规范强制规定了要把非default的导出按照default来导入,会导致大量现有的.d.ts类型定义不能正常工作,不能利用编辑器自动引用的特性。

例如在输入 LocalStorage 的时候会自动根据 .d.ts 自动加入 import {LocalStorage} from 'k8w-local-storage'

有范例呢?我这边测试是正常的,不知道是不是脚本内部写法的问题

脚本里没有启用在编辑器生效啊~
我再测试下

你脚本是如何写的,能发一下吗?

这是ES6和TypeScript的标准语法呀

没错,但是这是一个 ES6 模块导入另一个 ES6 模块的语法。在 ES6 模块导入 CommonJS 模块的时候,我们要求用 default 导入语法,这和 Node.js 对 ES6 模块导入 CommonJS 模块要求是一致的。就相当于 CommonJS 模块里有一句 export default exports;

因为现在 规范 强制规定了要把非default的导出按照default来导入,会导致大量现有的 .d.ts 类型定义不能正常工作,不能利用编辑器自动引用的特性。

关于 .d.ts 的问题,解决方式在我给的文档里有提及,见 https://docs.cocos.com/creator/3.0/manual/zh/scripting/modules/example-protobufjs.html#typescript-配置

关于自动补全目前没有很好的解决办法。

@kw8 我注意到这个库好像是你自己的库,为何不也提供一份 ES6 模块格式的?或者你可以在你的包中加上一层 ES6 的“包装”。例如,添加一个 “dist/esm/index.mjs”(注意后缀,.mjs):

import cjs from '../cjs/index.js'; // 原有的 CommonJS 模块
export const LocalStorage = cjs.LocalStorage; // 命名导出它

然后,在 package.json 里面:

{
    main: "./dist/cjs/index.js", // 依然指向 CommonJS 模块
    exports: "./dist/esm/index.mjs" // 当环境是 ESM 时,使用 `./dist/esm/index.mjs`
}

一个验证方式是,你用 Node.js(>= 12.7)新建个 .mjs 然后在里面执行 import { LocalStorage } 'kw8...'; 没问题,那就说明上述是没问题的。


另外,一个有意思的点是,你可以用 Node.js 来验证你现在的包,你可能发现 import { LocalStorage } 'kw8...' 在现在的包都没问题。这是因为 Node.js 做了一些“猜测”,它会猜你的 CommonJS 里有哪些命名导出然后把它转换为 ES6 命名导出。但这个是不可靠的,Node.js 也不推荐。所以 Creator 没有实现这个。见:https://nodejs.org/api/esm.html#esm_interoperability_with_commonjs

太感谢了!

是自己的库,之前是为了尽可能通用,按照 CommonJS 规范去构建打包了。

构建一份 ES6 规范的mjs可以解决这个问题

不过 npm 里仍然按照 CommonJS 打包的库数量也相当可观,这个就当做一个建议仅供参考了哈~
很重要一个原因可能是,TypeScript 的 tsconfig.json 打包规则默认是 commonjs

比如 uuid 这个非常常用的库,就无法引用。

脚本唯一特殊的,就是有box2d的碰撞监听~我再测试下吧
感谢大佬回复

这个动态合批看起来很牛b啊

节点A active=false时,节点A下再动态加个子节点B,直接destroy 节点A ,不会触发节点A和B的ondestory,
但当把节点A active =true,再去detory 节点A 则会触发节点B的ondestory(),请问这是不是bug?assets.zip (849.3 KB)

实测,js引擎切换成jsc之后编译通过,但js一直报错,无法正常运行。
由于需要使用wasm,在ios上只能切换成jsc。
希望能够在正式版解决。

好不容易支持npm了,为啥不支持 import {xxx} from 'xxx’的写法。。。
我们公司已经废弃default写法了,对于项目重构弊端重重。

尝试了一下放了一万多张图片在项目里,发现就卡在加载资源那里进不去了
开发者工具报错



QQ截图20210203162750

关注一下 3.0

怎么动态播放音频呀? 2.x里面的audioEngine在3.0里没找到

是放进去后重启导致的问题么?
还是开着的情况直接拖 1w 张图进去?

这个看上去是 inspector 预览报错。可以看看开发者 - 资源调试工具那边有没有错误信息

相关日志.zip (5.6 KB)
这是卡住之后的相关日志

是个狼灭啊

问题我找到了,有一张图片数据损坏,可能因为这个导致卡死了,另外我发现一张叫做 coin.png 的图片对应的meta文件名字叫做 Coin.png.meta,不知道有没有影响