2013-10-13 5 views
10

두 개의 SKPhysics 바디 사이에 간단한 조인트를 만들려고합니다. 그러나, 그들은 이상하게 행동하고 있습니다. 앵커 포인트가 장면 좌표에 있어야한다는 사실을 잘 알고 있습니다. 첨부 된 소스 코드를 살펴보십시오.SpriteKit : 기본 물리 조인트를 만드는 방법

예를 들어 직사각형에 작은 정사각형을 붙인 후 고정 조인트가 나타나는 방식입니다.

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

enter image description here

{

//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]; 

}

-(void)createFixedJointOnScene:(SKScene*)scene 

감사합니다.

+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); 

물리 본문을 설정하기 전에 스프라이트의 위치를 ​​설정하면 모든 것이 올바르게 작동하기 시작합니다.

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에서 수정 된 iOS 7.0.x의 버그입니다. – 0x141E