2013-10-13 10 views
10

Ich versuche, einfache Verbindungen zwischen zwei SKPhysicsBodies zu erstellen. Aber, sie benehmen sich komisch. Ich bin mir der Tatsache bewusst, dass die Ankerpunkte auf der Szenenkoordinate liegen sollten. Bitte sehen Sie sich den beigefügten Quellcode an.SpriteKit: So erstellen Sie grundlegende Physik Joints

Zum Beispiel ergibt sich so eine feste Verbindung nach dem Anbringen eines kleinen Quadrats an einem Rechteck.

-(void)createFixedJointOnScene:(SKScene*)scene 

{

//Adding Rectangle 

    SKSpriteNode* backBone = [[SKSpriteNode alloc] initWithColor:[UIColor whiteColor] size:CGSizeMake(20, 200)]; 
backBone.position = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0); 
backBone.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:backBone.size]; 
backBone.physicsBody.categoryBitMask = GFPhysicsCategoryRectangle; 
backBone.physicsBody.collisionBitMask = GFPhysicsCategoryWorld; 
[scene addChild:backBone]; 

//Adding Square 
SKSpriteNode* head = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(40, 40)]; 
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size]; 
head.position = CGPointMake(backBone.position.x, backBone.position.y-40); 
head.physicsBody.categoryBitMask = GFPhysicsCategorySquare; 
head.physicsBody.collisionBitMask = GFPhysicsCategoryWorld; 
[scene addChild:head]; 

//Pinning Rectangle and Square 
NSLog(@"Head position %@", NSStringFromCGPoint(head.position)); 
SKPhysicsJointFixed* pin =[SKPhysicsJointFixed jointWithBodyA:backBone.physicsBody bodyB:head.physicsBody anchor:head.position]; 
[self.physicsWorld addJoint:pin]; 

}

enter image description here

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest.zip

Danke.

+1

mein Beispiel hier überprüfen http://stackoverflow.com/questions/19342417/sprite-kit-pin-joints-appear-to-have-an-incorrect-anchor – DogCoffee

+1

Vielen Dank. – Bavan

+0

@Bavan: Ich habe Ihren Code verwendet, um mit SpriteNodes zu verbinden. Aber es ändert die Position meines Spritenodes. Kannst du mir bitte helfen ? – Nirav

Antwort

13

Danke Smick .. Nach Vergleichen von Smicks Code mit meinem Ich fand heraus, die Reihenfolge dieser beiden Zeilen verursachen das Problem.

head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size]; 
head.position = CGPointMake(backBone.position.x, backBone.position.y-40); 

Als ich die Position des Sprite vor der Einstellung seines Physikkörpers einstellte, fing alles richtig an zu arbeiten.

head.position = CGPointMake(backBone.position.x, backBone.position.y-40); 
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size]; 

Jetzt habe ich Smicks Code auch an den vollständigen Code angehängt und den Link hier angehängt. Genießen.

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest_Final_Working.zip

+1

Dies ist ein Fehler in iOS 7.0.x, der in 7.1 behoben wurde. – 0x141E