Box2dTest.zip (159.7 KB)
B2WheelJoint这个改后变得不一致了,在预览时完全没效果
建议不要直接去强制每一帧设置rigidBody的父节点的位置,这样box2d需要迭代很多次去计算,很容易引起rigidBody重叠。可以像这样在rigidBody上施加力,rigidBody之间不容易重叠,计算效率也要高很多。在android上也不会有问题了。
node是刚体父节点
//不推荐
this.node.setPosition(this.node.getPosition().add(new Vec3(v3.x, v3.y, 0)));
//推荐
this.node.getComponent(RigidBody2D).applyForceToCenter(new Vec2(-v3.x, -v3.y), true);
不过这个例子确实在安卓上的效率要比PC和ios上低很多。
如果你的目的是怪兽之间就是要重叠,那么建议把碰撞体设置为sensor,或者只要刚体不要碰撞体,不要让box2d去做碰撞恢复相关的计算,这个非常耗性能。
这个PR有在修复相关问题
好的 多谢
还有个问题是CircleCollider2D的offset不好使,不知道有没有人提过
我这边测试600个怪,Android VivoS9, Chrome上,ts版本物理耗时85ms,wasm版本物理5ms。
请确认下你的log是不是加载了box2d.wasm, 如果context不支持wasm我们会去加载box2d.asm.js, 性能应该比wasm要差一些。
赞同,给Playable的同学留点活路吧!
现在 spine wasm化,3.8.0版本暂时就没法做Playable了
要把所有文件打进一个html,研究了好久还没搞定
用cocos做Playable试玩的开发者还是不少的…
你可以改引擎,强制使用box2d.asm.js?
这是做割草吗。割草用box2d??
确实,好建议,如果单纯自己的一两个项目,改引擎完全没问题。
现在就是有很多人用cocos制作playable,面对的是很多普通开发者
有些坎是普通开发者很难跨越过去的,比如现在就有一个工具把 web-moblie 打包合并成一个html
那这个工具如果还要感知,对web-moblie进行修改引擎,适配各种引擎版本,对这个工具而言会有点奔溃,流程上非要到这一步也是无可奈何
后面可能会考虑让用户选择使用asm.js或者wasm,这样应该能解决你的问题
感谢,如果 spine 也能支持就更好了,就像现在3D物理引擎那样,统一都支持。
因为也确实可能会有用户,希望要自己手动来选择,不然 wasm和js 两个版本都打包进去,根据环境是否支持来决定运行哪一个,包体会增大的。有些场景对包体会格外敏感。
感谢,仅供参考
目前如果人为改变node的scale,会触发box2d collider destroy 和 init 很耗性能。
这个ts和wasm的版本都存在,后续应该需要改进一下。你可以尝试用别的方式来实现类似效果。

这个PR优化Box2Dwasm的性能,你的这个例子(node不断scale的情况)vivo android chrome的物理执行时间由30ms降低到18ms。
好的 多谢,