如何直接访问box2d方法?

Cocos Creator 2.3.1

我需要用到Box2d的SetMassData()方法(来设置角动量),然而在源码里可以看到cc.RigidBody类里并不提供给这个Box2d方法的接口。我学着它自己尝试访问cc.RigidBody对象的_b2Body属性,但是返回undefined。

所以请问具体该怎么做呢?cocos应该是具备了完整的box2d引擎的吧,本来就有的方法用不了也太难受了。有没有好心人能给我展示一下如何使用SetMassData()方法来作为一个示范呢?谢谢!

补充:在这个帖子里,cc.RigidBody 还是有b2Body属性的。但是现在好像没有了。。。

再补充:(rigidBody是一个cc.RigidBody) 我运行了console.log(rigidBody._getBody) ,得到
ƒ _getBody() {
return this._b2Body;
}
但是运行 console.log(rigidBody._getBody()) ,得到undefined

我自己摸索着觉得我明白了cocos为何要把box2d的一些方法藏起来。与SetMassData()不让用户访问相同,SetMass()方法也是不提供的。我们可以在文档里查看到,质量是根据连在Node上的物理碰撞箱的有关数据计算得到的。所以对角动量来说也同理。如果你要得到一根杆子的角动量,那你就应该给一个Node连上一个杆子形状的物理碰撞箱。如果你要得到一个质点系的角动量,那就应该在Node身上贴上一群在质点位置的,对应质点质量的物理碰撞箱。

所以我的问题已经解决了,在这里记录一下。感叹cocos的对box2d的利用还是很精妙的。

突然想起来再加一笔:脚本里生成物理碰撞箱并改参数后记得.apply() 。这对于collider来说是不用的,但对物理碰撞箱是需要的。昨天因为这个把我坑了很久。

1赞

我也曾因为没调用apply导致修改没效果坑了几个小时