2012-12-15 3 views
0

현재 iPhone 화면에 일련의 거품을 그려야하는 게임을하고 있습니다. 각각의 버블에는 자체의 다람쥐 바디가 있으며, PhysicsEditor라는 다각형 물리 편집기를 사용하여 그려져 있습니다. 이를 통해 다람쥐 몸체 (질량, 탄성, 앵커 포인트 등)를 만드는 데 필요한 정보가 들어있는 .plist 파일을 만들었습니다.Chipmunk Physics 'Anchorpoints and positions

다음은 주어진 좌표로 거품을 만드는 데 사용하는 코드입니다.

- (cpBody *)drawBubblesWithX:(int)x andY:(int)y { 

    NSString *name = names[arc4random() % 7]; 
    CCSprite *sprite; // Will contain the sprite object if name isn't Nil 

    // create physics shape 
    [[GCpShapeCache sharedShapeCache] anchorPointForShape:@"BubbleSlot"]; 
    cpBody *body = [[GCpShapeCache sharedShapeCache] createBodyWithName:@"BubbleSlot" inSpace:space withData:nil]; 

    cpBodySetPos(body, cpv(x, y)); 
    if (name != nil) { // If a color has been selected 

     // create and add sprite 
     sprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@"%@.png", name]]; 
     [self addChild:sprite]; 

     // set the position of the sprite to be the same as the physics body 
     sprite.position = CGPointMake(x, y); 

     // set the position of body based on the sprite object 
     cpBodySetUserData(body, (__bridge cpDataPointer)(sprite)); 

    } 
    return body; 
} 

에서 [[GCpShapeCache sharedShapeCache]을 목적은 기관의 생성을 위해 사용되는 .plist 파일을 포함한다. .plist에는 "BubbleSlot"이라는 이름의 몸체가 하나뿐입니다.이 거품은 모든 거품을 만들기위한 템플릿으로 사용됩니다.

본문의 고정 점은 약 (0.5, 0.5)입니다.

내 문제는 cpBodySetPos() 함수가 내 피직스 개체의 위치를 ​​설정하지 않는다는 것입니다. 앵커 포인트에 의해 변경됩니다. 예를 들어 iPhone 화면 중앙에 내 cpBody 객체의 위치를 ​​설정하려면 cpBodySetPos (body, cpv (160,240))를 사용합니다. 그러나 어떤 이유로 나는 .plist 파일에 (160,240)의 값으로 본문의 기준점을 설정 한 다음 그에 따라 본문을 만들어야합니다.

답변

1

스프라이트에는 고정 점도 있습니다. Physics Editor에서 설정 한 앵커 포인트 (0.5, 0.5) 스타일로 설정하고 싶을 것입니다. 이 방법으로 스프라이트는 몸의 중심이 정확하게 표시됩니다.

self.sprite.anchorPoint = [[GCpShapeCache sharedShapeCache] anchorPointForShape:@"BubbleSlot"]; 

PE에있는 앵커 포인트는 그게 전부입니다. PE의 plist 로딩 코드는 몸체의 위치를 ​​앵커 포인트로 설정하지만 어쨌든 시체의 위치를 ​​더 의미있는 곳으로 설정하기 때문에 오히려 쓸모가 없습니다. 그래서 위와 같이 스프라이트의 앵커 포인트를 설정하기 위해 사용합니다.

스프라이트의 위치를 ​​각 프레임의 본문 위치로 업데이트하는 중입니다. 맞습니까? 에 "갱신"이 같은 뭔가 또는 "단계"방법 : 증상에서

CGPoint pt = cpBodyGetPos(self.body); 
    self.sprite.position = pt; 

당신이 아니라 다람쥐를 업데이트시키는 것보다, 몸의 위치를 ​​직접 업데이트 할 수있다처럼 들린다. 시체를 만들고 세계에 추가 할 때 위치를 한 번만 설정해야합니다.

1

그래서 Physics Editor에서 앵커 포인트 속성을 정확히 사용할지 모르겠지만 Chipmunk에는 그런 개념이 없습니다. 신체의 위치는 무게 중심과 같은 것이며, 토크가 적용될 때 회전하는 동일한 지점입니다.

도형이 위치에 따라 몸체에 부착됩니다. 꼭지점이 (0,0) 인 다각형 모양을 가지고 있으면 몸의 무게 중심에 위치합니다. 몸체의 무게 중심 오른쪽에 (1, 0)의 꼭지점이 놓입니다.

고정 점은 Physics Editor가 (0, 0). 그것은 당신이 비록 위에 기술 한 것과 함께 이해가되지 않습니다. Hrm.