Как построить L-образный узел SKPhysicsBody в SpriteKit?

У меня есть многоугольник в форме буквы L, который явно вогнут, поэтому мне нужно использовать несколько SKPhysicsBody. Я попробовал главный узел, который содержал спрайт, и два дочерних узла, которые имеют прямоугольные узлы с физическими телами, чтобы составить L. Я попробовал это, и объект не затронут физикой.

SKPhysicsBody*body1 = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(48*1, 48*3) center:CGPointMake(48*1/2, (48*3)/2)];
SKPhysicsBody*body2 = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(48*1, 48*1) center:CGPointMake(48*1/2, (48*1)/2)];
SKNode* node1 = [SKNode node];
SKNode* node2 = [SKNode node];
node1.physicsBody = body1;
node2.physicsBody = body2;
[_node addChild:node1];
[_node addChild:node2];

Чего мне не хватает, к главному узлу не подключено физическое тело, что, как я полагаю, может быть проблемой, но не уверен, что туда поместить.

Я протестировал узел спрайта с простым прямоугольным телом, и он отлично работает.


person ahwulf    schedule 07.03.2014    source источник
comment
SKPhysicsJointFixed..   -  person El Tomato    schedule 08.03.2014
comment
Он по-прежнему ничего не делает, я добавил точку между двумя дочерними узлами, и ничего не изменилось.   -  person ahwulf    schedule 08.03.2014


Ответы (1)


В iOS 7.1 появились составные физические тела с методом [SKPhysicsBody bodyWithBodies:]. Из документации:

Формы физических тел, переданные в этот метод, используются для создания нового физического тела, площадь покрытия которого является объединением площадей его дочерних элементов. Эти области не обязательно должны быть смежными. Если между двумя частями есть пространство, другие тела могут пройти между этими частями. Однако физическое тело рассматривается как единое связанное тело, а это означает, что сила или импульс, приложенные к телу, воздействуют на все части, как если бы они удерживались вместе с помощью неразрушимого каркаса.

В вашем примере вы можете попробовать это (не проверено):

SKPhysicsBody*body1 = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(48*1, 48*3) center:CGPointMake(48*1/2, (48*3)/2)];
SKPhysicsBody*body2 = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(48*1, 48*1) center:CGPointMake(48*1/2, (48*1)/2)];
SKPhysicsBody *compoundBody = [SKPhysicsBody bodyWithBodies:@[body1, body2]];
_node.physicsBody = compoundBody;
person bunnyhero    schedule 25.09.2015