3.1版本碰撞识别问题

我的游戏,用3.1版本绑定的chipmunk进行碰撞识别,在不发动技能的情况下,需识别碰撞,玩家控制的角色的playerBody->setGroup(1),碰撞物body->setGroup(-1),成功识别碰撞。
发动技能后,需不识别碰撞,在我写的skillLaunch函数里,我把playerBody-setGroup(-1),于是成功不识别碰撞;
然后问题来了,在技能结束后,仍需回到识别碰撞状态,我的skillEnd函数里,我又重新playerBody->setGroup(1),可是仍然不识别碰撞。这个skillEnd肯定是调用了,因为其他参数都回到原来状态,就是碰撞识别无法恢复。我是新手,求大神帮忙解答。。

问题找到!不知是官方另有所想还是一个3.1版本的bug,查了源码

void PhysicsShape::setGroup(int group)
{
if (group < 0)
{
for (auto shape : _info->getShapes())
{
cpShapeSetGroup(shape, (cpGroup)group);
}
}

_group = group;

}
那么当group>=0呢?当group>=0,setGroup()不影响cpShape的group,只是改了官方加的壳的_group

另外还发现的一个小bug是,PhysicsBody中的方法getGroup定义为:
inline int getGroup() const { return _group; }
但setGroup方法定义为:
void PhysicsBody::setGroup(int group)
{
for (auto& shape : _shapes)
{
shape->setGroup(group);
}
}
是不是缺一行_group = group;?
否则physicsBody的保护成员_group永远为0,getGroup方法永远返回0.