2013-10-13 28 views
10

我想在兩個SKPhysicsBody之間創建簡單的關節。但是,他們行爲怪異。 我很清楚錨點應該在場景座標上。請看附帶的源代碼。SpriteKit:如何創建基礎物理關節

例如,這是一個固定的聯合結果後,如何在矩形上附加一個小方塊。

-(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

謝謝。

+1

檢查我的例子在這裏http://stackoverflow.com/questions/19342417/sprite-kit-pin-joints-appear-to-have-an-incorrect-anchor – DogCoffee

+1

非常感謝你。 – Bavan

+0

@Bavan:我已經使用你的代碼連接到SpriteNodes。但它改變了我的spritenode的位置。你能幫我麼 ? – Nirav

回答

13

謝謝Smick ..在將Smick的代碼與我的代碼進行比較後,我發現這兩行的順序導致了這個問題。

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

當我在設置其物理體之前設置Sprite的位置時,一切都開始正常工作。

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

現在我已將Smick的代碼附加到完整的代碼,並在此處附上鍊接。請享用。

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

+1

這是7.1.x中修復的iOS 7.0.x中的一個錯誤。 – 0x141E