box2d中b2GearJoint的一个bug
由于游戏中要实现对齿轮的模拟,于是用了box2d的b2GearJoint,在box2d中写好testbed,看着效果还行就兴冲冲的搬到自己项目中了,结果始终不起作用,两处代码对比也看不出所以然。只好去看box2d的源代码,折腾了几个小时,终于被我发现了---在b2world的createjoint方法中,创建一个joint后,会把该joint指针放入双方body的joint list 中,注意看代码,是放入bodyA和bodyB的joint list中

然后在b2world的step中,会遍历所有非静态body的joint处理连接关系,通常情况下,这没有问题,但是对于b2gearjoint不行---因为它自身包含着两个joint,涉及到4个body.而这4个body,是以这样奇葩的方式对应进来

明白了什么木有,在b2world的createjoint函数中,只会把生成的gearjoint放入bodyA和bodyB中,于是乎,但你创建的两个revolutejoint的bodyB都是静态物体时,b2world的step函数就会直接忽略掉这个joint了。
浙公网安备 33010602011771号