Привет,
Проблема в том, что вы вращаете оба объекта (спрайт + тело) с помощью кода.
Вам нужно повернуть один, и дать другому объекту понять, что это произошло, чтобы он тоже мог это сделать.
Например, если вы перемещаете тело, метод обновления спрайтов должен выглядеть следующим образом:
void updateShapes(void* ptr, void* unused)
{
cpShape* shape = (cpShape*)ptr;
Sprite* sprite = shape->data;
if(sprite)
{
cpBody* body = shape->body;
[sprite setPosition:cpv(body->p.x, body->p.y)];
[sprite setRotation: (float) CC_RADIANS_TO_DEGREES( -body->a )];
}
}
Последняя строка кода обновляет ротацию. Это линия, которую вы пропускаете.
Я надеюсь, что это поможет вам или кому-то еще в будущем.
Удачи, cocos2d, приятель!
Йоханн Т.