2010-07-31 2 views
1

У меня есть форма бурундука, с телом, в пространстве. Я удаляю тело из пространства, чтобы я мог его позиционировать, а не падать из-за силы тяжести и т. Д. Мне нужно, чтобы это тело двигалось, поэтому я не статично.Переместить кусок бурундука в положение спрайта

Мне нужно тело, чтобы обновить его положение в соответствии с положением спрайта Cocos2D в сцене + смещение.

Я устанавливаю положение тел с:

collShape-> Автодиагностика> р = collSprite.position; - похоже, это не работает, а не компилирует ошибки, оно работает, но форма столкновения не перемещается.

Можно ли переместить корпус столкновения на основании положения спрайта в методе тика?

ответ

0

То, что вы делаете, должно быть возможным.

Самый чистый способ - создать новый класс, полученный из CCSprite, а затем переопределить метод setPosition, чтобы обновить тело спрайта.

Преимущество этого заключается в том, что в любое время, когда положение спрайта изменяется (либо явно вами, либо какой-либо последовательностью анимации), тело Chipmunk будет автоматически обновляться.

-(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); 
} 

... который обновляет форму до местоположения тела и вращения, к которому он прикреплен. Если это не происходит, может быть, ваша форма не добавляется в пространство или не добавляется в тело?