在脚本里修改刚体类型出现了断言错误

该刚体原本是静态刚体,之后我在脚本里用
this.node.getComponent( cc.RigidBody ).type = cc.RigidBodyType.Dynamic
出现了断言错误,然后尝试this.node.getComponent( cc.RigidBody ).type = 2也有断言错误,
请问是因为刚体类型不可以在脚本里修改么?还是别的原因?

我也出现了断言错误,请问你是怎么解决的呢

没解决,直接不改了。不知道能不能先移除刚体再添加

我请教了其他大神,他告诉我刚体的类型是不能进行动态修改的,所以我在动态刚体的修改都是修改重力和线速度了

scheduleOnce

好吧。这样挺麻烦的

刚好碰到这个问题,然后搜到了这个帖子,就在这里说一下,

查看box2d的源码就能看到。每次world step的时候,会进行锁定,不允许修改刚体类型,如果是在碰撞回调中修改刚体类型就会报错。

知道了原因,那么解决思路就很简单了,用promise或者settimeout将修改刚体类型的操作延迟在下一帧回调中就可以了。

亲测有效,希望对你有所帮助

onBeginContact: function(contact, selfCollider, otherCollider) {
this.scheduleOnce(() => {
// 在下一帧处理 否则设置position 设置刚体类型都会报错
}, 0)
},