La unión pin simple en SpriteKit no funciona como se esperaba

Me gustaría hacer un péndulo. Comenzando con un SKScene y todo pnetworkingeterminado, hago lo siguiente …

- (void)createSceneContents { self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.view.bounds]; // object 1 is the fulcrum SKSpriteNode *object1 = [SKSpriteNode spriteNodeWithColor:[UIColor networkingColor] size:CGSizeMake(5, 5)]; [self addChild:object1]; object1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:object1.frame.size]; object1.physicsBody.dynamic = NO; object1.position = self.view.center; // object2 is like a broomstick, which I will pin to the fulcrum SKSpriteNode *object2 = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(90, 2)]; [self addChild:object2]; object2.anchorPoint = CGPointMake(0.0, 0.5); object2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:object2.frame.size]; object2.position = self.view.center; // pin the physics bodies SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:object1.physicsBody bodyB:object2.physicsBody anchor:object1.position]; [self.physicsWorld addJoint:pinJoint]; } 

Si no agrego la lógica del pin, como se esperaba, el fulcro se queda en medio de la escena y la escoba cae al suelo, así que sé que la escoba está sujeta a la gravedad. Después de agregar el pin, obtengo esto:

introduzca la descripción de la imagen aquí

Sin movimiento ¿Por qué? Esto no causa movimiento tampoco …

 [object2.physicsBody applyForce:CGVectorMake(0, -5)]; 

Espero que la escoba oscile y oscile porque está clavada en el fulcro. He visto artículos sobre el posicionamiento de los nodos primero, antes de las articulaciones, pero lo he hecho. ¿Estoy equivocado al esperar que la escoba swing? ¿Cómo puedo hacer que lo haga?

El nodo 2 tiene un anchorPoint mal definido, aquí se carga un ejemplo:

Código completo de ejemplo

Imagen:

3 segundos de código de ejecución

Código Swift 3:

  let nodeSize = CGSize(width: 10, height: 10) let node = SKSpriteNode(color: .networking, size: nodeSize) node.physicsBody = SKPhysicsBody(rectangleOf: nodeSize) node.physicsBody?.isDynamic = false self.addChild(node) let node2Size = CGSize(width: 60, height: 8) let node2 = SKSpriteNode(color: .green, size: node2Size) node2.position = CGPoint(x: 30, y: 0) node2.physicsBody = SKPhysicsBody(rectangleOf: node2Size) node2.physicsBody?.mass = 1.0 self.addChild(node2) let a = SKPhysicsJointPin.joint(withBodyA: node.physicsBody! , bodyB: node2.physicsBody!, anchor: CGPoint(x: 0.0, y: 0.0)) self.physicsWorld.add(a) 

C objective:

 SKSpriteNode *object1 = [SKSpriteNode spriteNodeWithColor:[UIColor networkingColor] size:CGSizeMake(5, 5)]; [self addChild:object1]; object1.position = self.view.center; object1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:object1.frame.size]; object1.physicsBody.dynamic = NO; SKSpriteNode *object2 = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(90, 2)]; [self addChild:object2]; object2.position = CGPointMake(self.view.center.x+45, self.view.center.y); object2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:object2.frame.size]; SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:object1.physicsBody bodyB:object2.physicsBody anchor:self.view.center]; [self.physicsWorld addJoint:pinJoint]; 

Gracias a @Maetschl, pude hacer que funcione en Objective-c de la siguiente manera (eliminando el punto de anclaje y simplemente posicionando el nodo giratorio en un borde) …

 SKSpriteNode *object1 = [SKSpriteNode spriteNodeWithColor:[UIColor networkingColor] size:CGSizeMake(5, 5)]; [self addChild:object1]; object1.position = self.view.center; object1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:object1.frame.size]; object1.physicsBody.dynamic = NO; SKSpriteNode *object2 = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(90, 2)]; [self addChild:object2]; object2.position = CGPointMake(self.view.center.x+45, self.view.center.y); object2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:object2.frame.size]; SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:object1.physicsBody bodyB:object2.physicsBody anchor:self.view.center]; [self.physicsWorld addJoint:pinJoint];