CCArmature 用 CHIPMUNK 碰撞时报错

调用如下
body = cpBodyNew(INFINITY, INFINITY);
cpSpaceAddBody(space, body);
player->armature->setBody(body);
shape = player->armature->getShapeList();
while(shape)
{
cpShape *next = shape->next_private;
shape->collision_type = ePlayerTag;
shape = next;
}

运行到有碰撞的帧时包错

断点是CCColliderDetector的201行
CCARRAY_FOREACH(m_pColliderBodyList, object)
{
ColliderBody *colliderBody = (ColliderBody *)object;
cpShape *shape = colliderBody->getShape();
cpSpaceAddShape(m_pBody->space_private, shape);
}
cpSpaceAddShape时候报错:This shape is already added to a space and cannot be added to another.

已修改为:
if (m_bActive)
{
CCARRAY_FOREACH(m_pColliderBodyList, object)
{
ColliderBody *colliderBody = (ColliderBody *)object;
cpShape *shape = colliderBody->getShape();
if(shape->space_private == NULL)
{
cpSpaceAddShape(m_pBody->space_private, shape);
}
}
}
else
{
CCARRAY_FOREACH(m_pColliderBodyList, object)
{
ColliderBody *colliderBody = (ColliderBody *)object;
cpShape *shape = colliderBody->getShape();
if (shape->space_private != NULL)
{
cpSpaceRemoveShape(m_pBody->space_private, shape);
}
}
}