2010-07-31 3 views
1

공간에 시체가있는 다람쥐 모양이 있습니다. 나는 공간에서 시체를 제거하여 중력에 의한 낙하를 방지하고 위치를 지정할 수 있습니다.이 시체를 움직일 수 있어야하므로 정적이 아닙니다.다람쥐 몸체를 스프라이트 위치로 이동

장면에서 Cocos2D 스프라이트의 위치 + 오프셋에 따라 위치를 업데이트하려면 본문이 필요합니다.

내가 함께 시체의 위치를 ​​설정 해요 :

collShape-> 신체 -> P = collSprite.position; - 이것은 작동하지 않는 것처럼 보입니다. 오류를 컴파일하지 않고 실행되지만 충돌 셰이프가 움직이지 않습니다.

틱 메서드에서 스프라이트의 위치를 ​​기반으로 충돌 본문을 이동할 수 있습니까?

답변

0

당신이하고있는 일이 가능해야합니다.

가장 깨끗한 방법은 CCSprite에서 파생 된 새 클래스를 만든 다음 setPosition 메서드를 재정의하여 스프라이트의 본문을 업데이트하는 것입니다.

이점은 스프라이트의 위치가 (사용자 또는 애니메이션 시퀀스에 의해 명시 적으로 변경 될 때마다) 다람쥐 몸체가 자동으로 업데이트된다는 것입니다.

-(void) setPosition:(CGPoint) p{ 
    [super setPosition:p]; 
    if (self->body != nil) { 
     self->body->p.x = p.x; 
     self->body->p.y = p.y; 
     //Note: also call cpSpaceRehash to let Chipmunk know about the new position 
    } 
} 
0

cpSpaceStep을 호출하면 활성 셰이프 목록이 만들어지고 각각에 대해 cpShapeUpdateFunc가 호출됩니다. 그 기능은 다음과 같습니다 :

void 
cpShapeUpdateFunc(cpShape *shape, void *unused) 
{ 
    cpBody *body = shape->body; 
    cpShapeUpdate(shape, body->p, body->rot); 
} 

... 모양이 몸체 위치와 회전이 첨부 된 것으로 업데이트됩니다. 그 모양이 공간에 추가되지 않았거나 몸에 추가되지 않았습니까?