Я пытаюсь в основном прямоугольник с отверстием в новой структуре, предоставляемый яблоком, единственная проблема заключается в том, что это метод по умолчанию bodyWithPolygonFromPath не принимает вогнутые полигоны, поэтому я попытался подойти к проблеме следующим образом:Создание выпуклых SKPhisycsBodies
CGPathMoveToPoint (path, NULL, self.size.width/4.0, self.size.height/4.0);
CGPathAddLineToPoint(path, NULL, self.size.width/2.0, -self.size.height/4.0);
CGPathAddLineToPoint(path, NULL, -self.size.width/2.0, -self.size.height/4.0);
CGPathAddLineToPoint(path, NULL, -self.size.width/2.0, self.size.height/4.0);
CGPathCloseSubpath (path);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
self.physicsBody.affectedByGravity = YES;
self.physicsBody.categoryBitMask = solidCategory;
self.physicsBody.dynamic = YES;
[self addChild:shape1];
self.auxiliaryShapeNode = [[SKSpriteNode alloc] init];
CGPathMoveToPoint (path_aux, NULL, 3*self.size.width/8.0, 0);
CGPathAddLineToPoint(path_aux, NULL, self.size.width/2.0, 1.5*self.size.height/4.0);
CGPathAddLineToPoint(path_aux, NULL, self.size.width/2.0, -self.size.height/4.0);
CGPathCloseSubpath (path_aux);
self.auxiliaryShapeNode.anchorPoint = CGPointMake(-3.0, 1.0/2.5);
self.auxiliaryShapeNode.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path_aux];
self.auxiliaryShapeNode.physicsBody.dynamic = YES;
self.auxiliaryShapeNode.physicsBody.categoryBitMask = solidCategory;
[self addChild:self.auxiliaryShapeNode];
[self.scene.physicsWorld addJoint:[SKPhysicsJointFixed jointWithBodyA:self.physicsBody bodyB:self.auxiliaryShapeNode.physicsBody anchor:self.position]];
break;
где самость пользовательского спрайт узел я создал, который имеет узел SKSprite в качестве вспомогательной формы тела, так что форма может быть сделана с помощью двумя выпуклых многоугольников, то он создает форму, как это предполагается, но когда сцена начинает играть в сустав, не работает так, как предполагается, и перемещает маленький треугольный путь туда, где он начинался
У вас возникли утечки памяти с помощью этого кода? Я создаю физические тела с полигонами, образующими путь, и инструменты показывают мне странные утечки памяти в PhysicsKit (ответственный кадр содержит информацию о объектах PKPoint). Моя реализация очень похожа на вашу, но у меня нет суставов, и после создания тела я вызываю 'CGPathRelease (path)'. Интересно, является ли это ошибкой в наборе спрайтов, или я делаю что-то неправильно. – Darrarski
Я забыл добавить, что когда я создаю тела, используя '[SKPhysicsBody bodyWithCircleOfRadius: radius]' или '[SKPhysicsBody bodyWithRectangleOfSize: size]' методы, я вообще не получаю утечки памяти. – Darrarski
Хм ... может быть, вам стоит поделиться своим кодом, я не обнаружил утечки памяти, и он все еще работает довольно хорошо ... возможно, это имеет какое-то отношение к сложности вашего полигона, как самого сложного, вы использовали трапецию, но если вы поделитесь своим кодом, я буду рад помочь, если я смогу – heczaco