推荐一个支持定点数的物理引擎 Rapier,物理帧同步刚需

没解决 :rofl:

库要用@dimforge/rapier3d-compat 或@dimforge/rapier2d-compat
然后tsconfig.json要里的compilerOptions,添加"allowSyntheticDefaultImports": true

使用时直接
import RAPIER from ‘@dimforge/rapier2d-compat’;

import RAPIER from ‘@dimforge/rapier3d-compat’;

:100:谢谢大佬,有时间我再试试 :partying_face:

感谢 安装也能读取到RAPIER 但是调用api就报错了 new RAPIER.World就undefined了. 是wasm的原因?
你是怎么用的~

TA的官方文档有写
要先调用Rapier.init().then(()=>{})
才行以进行其他api调用,init主要就是异步加库wasm

1赞

你好,请问打包成微信小游戏报以下错误,WebAssembly.instantiate: first argument must be a string。有办法解决吗?
https://forum.cocos.org/t/topic/152688

这个要去ta 的github项目里,找一下WebAssembly.instantiate 的处理改了再重新打包一个版本来用了

2赞

试了吗?为啥我还是不好使

没有,没排期。

你是不是直接调ta库里的东西?按我的import RAPIER from ‘@dimforge/rapier2d-compat’;设置后, 每次都必须是RAPIER.Rigidbody这様, 你不能用import {Rigidbody} from ‘@dimforge/rapier2d-compat’, 这様调会显示Rigidbody undefine

请问是rapier.js这个仓库吗

我是用@dimforge/rapier2d-compat 和 @dimforge/rapier3d-compat

这个包的wasm是base64的,是要先解析保存为wasm文件,然后再instantiate么,还是直接载入rapier_wasm2d_bg.wasm呢

不需要呀, 你调init就好了, 它都帮你处理好wasm文件的处理了

import RAPIER from '@dimforge/rapier2d-compat';
RAPIER.init().then(()=>{
   const world = new RAPIER.World({x:0,y:-98});
});

微信小游戏也可以么,我这边有一个WASM的初始化报错ERROR: Error: WXWebAssembly.instantiate: only support file type .wasm or .wasm.br

我是发自家产品webview里的, 没在微信小游戏试过. 按你那报错, 估计 是微信限制了wasm实例方式
我猜你可以先源码里定义一个静态变量, 然后再把代码中这段WebAssembly.instantiate(第一个参数改为读取你定义的静态变量。


然后把.wasm文件放到resouces目录下, 再使用

比如你定在源码定义了一个wasmUrl静态变量
import RAPIER from '@dimforge/rapier2d-compat';
cc.resource.load( xxxx,cc.Asset,(err,asset)=>{ 
   RAPIER.wasmUrl = asset.nativeUrl
   RAPIER.init().then(()=>{
       this.node.emit('rapier-inited');
   });
 }

不知能不能行, 但可以试试

2赞

测试后微信小游戏平台可以跑通,多谢大佬指点!

1赞

你给ta一个微微的角速度呗, 很多物理引擎都是这様,调用rigidbody.setAngvel(你的角速度值)

这个2d,引入就5m了,而且我的是这样的image 。在default里面

引入这个物理引擎之后遇到一些奇怪的适配问题.不知道有没有大佬们遇到过类似的问题?在原生浏览器或微信开发者工具中测试没有问题,但是在苹果真机上会出现部分刚体不能触发碰撞穿越过去的情况…我大概同时构造了三百到四百个刚体